避坑指南:Spring Boot整合Activiti 7流程设计器时,我遇到的5个典型问题及解决方案
Spring Boot整合Activiti 7流程设计器实战避坑指南最近在项目中尝试将Activiti 7流程设计器整合到Spring Boot应用中本以为按照官方文档操作就能顺利完成没想到踩了不少坑。这篇文章记录了我遇到的五个典型问题及其解决方案希望能帮助其他开发者少走弯路。1. 版本兼容性问题Spring Boot与Activiti 7的版本匹配第一次尝试整合时直接使用了最新的Spring Boot 2.7.0和Activiti 7.1.0.M6结果启动时就报了一堆类找不到的异常。经过排查发现Activiti 7对Spring Boot的版本有严格要求。典型错误现象java.lang.NoClassDefFoundError: org/springframework/core/io/support/SpringFactoriesLoader根本原因 Activiti 7.1.0.M6设计时是基于Spring Boot 2.5.x版本构建的与Spring Boot 2.7.x存在兼容性问题。解决方案在pom.xml中锁定兼容版本组合properties spring-boot.version2.5.12/spring-boot.version activiti.version7.1.0.M6/activiti.version /properties排除冲突的依赖dependency groupIdorg.activiti/groupId artifactIdactiviti-spring-boot-starter/artifactId version${activiti.version}/version exclusions exclusion groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-jdbc/artifactId /exclusion /exclusions /dependency验证方法 启动应用后检查日志确认没有版本冲突警告且能正常访问/actuator/health端点。2. 静态资源404问题流程设计器页面加载失败整合Activiti Modeler后访问设计器页面时控制台报错CSS和JS文件全部返回404。典型错误现象GET http://localhost:8080/editor-app/editor.css 404根本原因 Spring Boot默认静态资源路径与Activiti Modeler的资源结构不匹配且没有正确配置资源处理器。解决方案创建配置类自定义静态资源映射Configuration public class WebConfig implements WebMvcConfigurer { Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler(/editor-app/**) .addResourceLocations(classpath:/static/editor-app/); registry.addResourceHandler(/diagram-viewer/**) .addResourceLocations(classpath:/static/diagram-viewer/); } }确保资源文件放置在正确位置src/main/resources/static/ ├── editor-app/ ├── diagram-viewer/ ├── modeler.html关键检查点确认static目录在resources下而非webapp检查文件路径大小写Linux环境区分大小写3. 数据库表未自动生成问题配置好数据源后启动应用发现Activiti所需的表没有自动创建。典型错误现象 日志中没有出现Creating tables for Activiti相关输出查询数据库也没有ACT_前缀的表。根本原因 Spring Boot自动配置没有生效可能是由于缺少spring.datasource配置没有启用自动建表配置使用了自定义的DataSource Bean解决方案在application.yml中添加配置spring: datasource: url: jdbc:mysql://localhost:3306/activiti?useSSLfalse username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver activiti: database-schema-update: true check-process-definitions: false如果使用自定义DataSource需要添加EnableActiviti注解Configuration EnableActiviti public class ActivitiConfig { Bean ConfigurationProperties(prefix spring.datasource) public DataSource activitiDataSource() { return DataSourceBuilder.create().build(); } }验证方法 启动应用后检查日志中是否有表创建语句或直接查询数据库确认表是否存在。4. 与MyBatis-Plus的依赖冲突问题项目中已经使用了MyBatis-Plus引入Activiti后启动报错。典型错误现象java.lang.IllegalStateException: Found multiple SpringBootConfiguration annotated classes根本原因 Activiti自带了MyBatis依赖与MyBatis-Plus产生冲突。解决方案在pom.xml中排除Activiti的MyBatis依赖dependency groupIdorg.activiti/groupId artifactIdactiviti-spring-boot-starter/artifactId version${activiti.version}/version exclusions exclusion groupIdorg.mybatis/groupId artifactIdmybatis/artifactId /exclusion exclusion groupIdorg.mybatis/groupId artifactIdmybatis-spring/artifactId /exclusion /exclusions /dependency添加MyBatis-Plus的依赖dependency groupIdcom.baomidou/groupId artifactIdmybatis-plus-boot-starter/artifactId version3.5.1/version /dependency配置MyBatis-Plus与Activiti共用数据源Bean public SpringProcessEngineConfiguration springProcessEngineConfiguration( DataSource dataSource, PlatformTransactionManager transactionManager) { SpringProcessEngineConfiguration config new SpringProcessEngineConfiguration(); config.setDataSource(dataSource); config.setTransactionManager(transactionManager); config.setDatabaseSchemaUpdate(true); return config; }5. 流程设计器汉化失败问题按照网上教程添加了汉化文件但界面仍然是英文的。典型错误现象 添加了zh-CN.json文件后设计器界面仍显示英文。根本原因汉化文件位置不正确浏览器语言设置未生效app.js配置未正确修改完整解决方案确认文件结构resources/static/ ├── editor-app/ ├── i18n/ ├── zh-CN.json ├── stencilset.json修改StencilsetRestResource.javaGetMapping(value /rest/stencil-sets/editor, produces application/json) public String getStencilset() { InputStream stencilsetStream this.getClass().getClassLoader() .getResourceAsStream(static/stencilset.json); // ...读取文件内容 }修改editor-app/app.js// 替换原来的语言设置 if(navigator.language zh-CN || navigator.language zh) { $translateProvider.preferredLanguage(zh-CN); } else { $translateProvider.preferredLanguage(en); }添加HTTP拦截器确保Accept-Language头Bean public WebMvcConfigurer localeConfigurer() { return new WebMvcConfigurer() { Override public void addInterceptors(InterceptorRegistry registry) { LocaleChangeInterceptor localeInterceptor new LocaleChangeInterceptor(); localeInterceptor.setParamName(lang); registry.addInterceptor(localeInterceptor); } }; }最终验证 清除浏览器缓存后重新访问设计器界面应显示中文。如果仍然不行可以尝试在URL后添加?langzh_CN参数。