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的各服務組件來使用。