springboot2项目引入activiti7
钢翼
编程
activiti6并不兼容springboot2,所以springboot想要引入activiti7,并没有其他方案。
1.添加引用
在pom.xml添加以下引用,这里我排除了mybatis,因为和我项目的mybatis-plus版本冲突了。
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter</artifactId>
<version>7.1.0.M6</version>
<exclusions>
<exclusion>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
</exclusion>
</exclusions>
</dependency>
2.自定义数据源
由于我用了dynamic-datasource-spring-boot-starter支持多数据源,我并不想让activiti的表占用我的主数据库。 找了一圈也只能通过注入Bean的方式自定义数据源。缺点就是没法使用application.yml的默认配置。
@Component
public class ActivitiConfig {
@Autowired
private DataSource dataSource;
@Bean
@Primary
public SpringProcessEngineConfiguration processEngineConfiguration(PlatformTransactionManager transactionManager) {
//直接注入DynamicRoutingDataSource会报错,这里用强制类型的方式
DynamicRoutingDataSource dynamicRoutingDataSource = (DynamicRoutingDataSource)dataSource;
//使用多数据源中的activiti作为数据源。
DataSource dataSource = dynamicRoutingDataSource.getDataSource("activiti");
SpringProcessEngineConfiguration config = new SpringProcessEngineConfiguration();
config.setDataSource(dataSource);
//由于事务必须设置,通过参数注入
config.setTransactionManager(transactionManager);
//没有表则自动添加
config.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
//历史记录等级
config.setHistoryLevel(HistoryLevel.FULL);
//启用历史记录
config.setDbHistoryUsed(true);
return config;
}
}
3.spring security整合
由于activiti7是整合了spring security的,而我项目也是有整合spring security,但是我由于使用了多套用户体系。所以项目里面有多个UserDetailsService的实现。 如果不处理,activiti7是不知道我要使用哪个实现,所以必须手动注入UserGroupManager,指定使用哪个实现。
@Bean
public UserGroupManager userGroupManager(@Qualifier("firstUserDetailsService") UserDetailsService userDetailsService) {
return new ActivitiUserGroupManagerImpl(userDetailsService);
}