activiti学习8:springboot2.0整合activiti5
本文记录下如何整合activiti5.22.0和springboot2.0.1
因为版本问题,直接使用activiti5提供的activiti-spring-boot-starter-basic
是不能整合springboot2.0的。
一、整合原理
springboot应用本质上也是一个spring应用,只不过简化了许多配置,有许多配置工作都通过起步依赖自动进行了。所以不能自动配置的时候我们就可以通过手动配置来完成。回忆下activiti如何和spring整合:在spring的配置文件中依次配置如下的bean
(1)数据源(连接池)
(2)事务管理器(和spring整合后必须配置事务管理器)
(3)流程引擎配置对象,这里可以注入一些流程引擎的配置
(4)流程引擎对象
(5)activiti的服务组件,配置后在程序中可以直接从容器中获取
同样的,在springboot中我们也可以自己手动配置这些bean,让框架帮我们创建这些bean,完成整合,在应用中直接获取这些bean
二、具体实现
首先引入activiti的spring模块的依赖
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring</artifactId>
<version>5.22.0</version>
</dependency>
引入这个依赖后就不需要再引入activiti和springboot整合的那个starter了,所有bean的配置全部手动完成。
在springboot中要配置一个bean很简单,可以单独定义一个配置类,也可以直接在启动类中使用@Bean
注解进行配置。
(1)连接池,连接池对象可以自己配置一个,也可以直接在启动类中用@Autowired注入springboot提供的
(2)事务管理器,处理方式和连接池一样
(3)流程引擎配置对象:配置activiti的spring模块提供的SpringprocessEngineConfiguration类的对象作为流程引擎配置bean
(4)流程引擎对象:使用activiti的spring模块提供的ProcessEngineFactoryBean
,它用来维护一个ProcessEngine实例,向它注入一个流程引擎配置对象,就会自动创建ProcessEngine。在得到spring上下文后,通过getBean方法获取的ProcessEngineFactoryBean的bean,实际上得到的是一个ProcessEngine实例。
(5) 各服务组件可通过流程引擎对象获得
在配置类中具体的配置方式如下
@SpringBootApplication
public class ActivitiTestApplication {
public static void main(String[] args) {
SpringApplication.run(ActivitiTestApplication.class);
}
//事务管理器
@Autowired
private PlatformTransactionManager platformTransactionManager;
//连接池
@Autowired
private DataSource dataSource;
/**
* 流程引擎配置对象
* @return
*/
@Bean
public SpringProcessEngineConfiguration processEngineConfiguration(){
SpringProcessEngineConfiguration processEngineConfiguration=new SpringProcessEngineConfiguration();
processEngineConfiguration.setDataSource(dataSource);
processEngineConfiguration.setTransactionManager(platformTransactionManager);
processEngineConfiguration.setDatabaseSchemaUpdate("true");
processEngineConfiguration.setActivityFontName("宋体");
processEngineConfiguration.setLabelFontName("宋体");
return processEngineConfiguration;
}
/**
* 流程引擎对象的bean
* @param processEngineConfiguration
* @return
*/
@Bean
public ProcessEngineFactoryBean processEngine(@Qualifier("processEngineConfiguration") SpringProcessEngineConfiguration processEngineConfiguration){
ProcessEngineFactoryBean processEngineFactoryBean=new ProcessEngineFactoryBean();
processEngineFactoryBean.setProcessEngineConfiguration(processEngineConfiguration);
return processEngineFactoryBean;
}
//以下几个为activiti的服务组件对应的bean
@Bean
public RepositoryService repositoryService(@Qualifier("processEngine") ProcessEngine processEngine){
return processEngine.getRepositoryService();
}
@Bean
public RuntimeService runtimeService(@Qualifier("processEngine") ProcessEngine processEngine){
return processEngine.getRuntimeService();
}
@Bean
public TaskService taskService(@Qualifier("processEngine") ProcessEngine processEngine){
return processEngine.getTaskService();
}
@Bean
public IdentityService identityService(@Qualifier("processEngine") ProcessEngine processEngine){
return processEngine.getIdentityService();
}
@Bean
public HistoryService historyService(@Qualifier("processEngine") ProcessEngine processEngine){
return processEngine.getHistoryService();
}
}
这样就完成了springboot2和activiti5的整合,在你的应用中就可以直接注入activiti的各服务组件来使用。