springboot2项目引入activiti7

返回
Author Avatar
钢翼
2021-02-26
编程
77

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);
    }