问题描述
spring-boot-starter-parent版本升级,导致程序无法启动。
版本升级:
2.1.2.RELEASE -> 2.2.7.RELEASE
pom.xml
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.7.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter-basic</artifactId>
<version>5.22.0</version>
</dependency>
</dependencies>
异常信息:
java.lang.IllegalArgumentException: Could not find class [org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration]
...
Caused by: java.land.ClassNotFoundException: org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration
问题原因
spring boot的类路径发生变化:
org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration
更改成:
org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration
activiti的自动配置文件:org.activiti.spring.boot.SecurityAutoConfiguration中引用了更改之前的类,所以报错找不到。
@Configuration
@AutoConfigureBefore(org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration.class)
public class SecurityAutoConfiguration {}
解决方法
弃用activiti-spring-boot-starter-basic。
手动引入activiti的dependency和config
pom.xml配置方式:
parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.7.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-engine</artifactId>
<version>5.22.0</version>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring</artifactId>
<version>5.22.0</version>
</dependency>
</dependencies>
只需要依赖activiti-engine 和activiti-spring就可以,其他的依赖会间接引入。
配置config,初始化activiti。其中有省略。
@Configuration
public class WorkflowConfiguration {
@Bean
@ConfigurationProperties(prefix="acitiviti.datasource")
public DataSource activitiDataSource () {
return DataSourceBuilder.create().build();
}
@Bean
public SpringProcessEngineConfiguration springProcessEngineConfiguration(PlatformTransactionManager transactionManager, SpringAsyncExecutor springAsyncExecutor) throws Exception {
SpringProcessEngineConfiguration config = new SpringProcessEngineConfigturation();
config.setDataSource();
config.setTransactionManager();
config.setAsyncExecutor();
...
retrurn config;
}
@Bean
public ProcessEngineFactoryBean springProcessEngineBean(SpringProcessEngineConfiguration configuration) {
ProcessEngineFactoryBean processEngineFactoryBean = new ProcessEngineFactoryBean();
processEngineFactoryBean.setProcessEngineConfiguration(configuration);
return processEngineFactoryBean;
}
@Bean
@ConditionalOnMissingBean
@Override
public RuntimeService runtimeServiceBean(ProcessEngine processEngine) {
return processEngine.getRuntimeService();
}
@Bean
@ConditionalOnMissingBean
@Override
public RepositoryService repositoryServiceBean(ProcessEngine processEngine) {
return processEngine.getRepositoryService();
}
@Bean
@ConditionalOnMissingBean
@Override
public TaskService taskServiceBean(ProcessEngine processEngine) {
return processEngine.getTaskService();
}
@Bean
@ConditionalOnMissingBean
@Override
public HistoryService historyServiceBean(ProcessEngine processEngine) {
return processEngine.getHistoryService();
}
@Bean
@ConditionalOnMissingBean
@Override
public ManagementService managementServiceBeanBean(ProcessEngine processEngine) {
return processEngine.getManagementService();
}
@Bean
@ConditionalOnMissingBean
public TaskExecutor taskExecutor() {
return new SimpleAsyncTaskExecutor();
}
@Bean
@ConditionalOnMissingBean
@Override
public IntegrationContextManager integrationContextManagerBean(ProcessEngine processEngine) {
return super.integrationContextManagerBean(processEngine);
}
}
解决问题历程
- 吐槽spring boot:生了个小版本,结果把包路改变了!
- 定位问题。升级spring boot后,并不知道是activiti的问题。最后是挨个依赖删除,才定位到问题。
- 升级activiti:先是升级到6.0.0,发现是同样的问题,抛出同样的错误。升级到activiti7,依赖为:
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter</artifactId>
<version>7.*</version>
</dependency>
然而还是不好用,但是错误发生了变化。
还有一个问题,activiti提供的编程接口发生了变化!
4. 去掉activiti-spring-boot-starter,直接依赖activiti
总结
spring boot太不讲究了,你升级个小版本,变个屁的包路径!