為了深入得學(xué)習(xí)activiti,從頭開始,這次用spring boot作為項(xiàng)目框架,來一步一步搭建一個(gè)activiti流程管理程序。作文以記之。
什么是activiti?
Activiti is battle-tested Business Process Management (BPM).
Activiti是一個(gè)身經(jīng)百戰(zhàn)的業(yè)務(wù)流程管理引擎。
不是某卓的活動(dòng)。
為什么要用工作流引擎?
簡單來說,就是為了統(tǒng)一管理流程業(yè)務(wù)。
想想看,如果要設(shè)計(jì)一個(gè)流程的程序,通常需要在數(shù)據(jù)庫中存各種狀態(tài)值,比如一個(gè)訂單程序,要標(biāo)記訂單是未付款、已付款、已出庫等等狀態(tài),而這些各種各樣的狀態(tài)參雜在程序中,邏輯自然就變得復(fù)雜了。
而將這些狀態(tài)對應(yīng)流程里的一個(gè)個(gè)步驟,交由流程引擎去管理,這樣不僅簡化了業(yè)務(wù)邏輯代碼,而且,還有很強(qiáng)的擴(kuò)展性。我可以修改我的流程,我可以添加一些步驟而不用改我的數(shù)據(jù)庫表結(jié)構(gòu),不用改我的業(yè)務(wù)邏輯。
在spring boot中使用activiti api
spring boot的初始配置請參考:
http://www.itdecent.cn/p/3ec727e987a8
依賴:
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-engine</artifactId>
<version>${activiti.version}</version>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring</artifactId>
<version>${activiti.version}</version>
</dependency>
activiti相關(guān)配置:
/**
* Created by liuruijie on 2017/2/20.
* activiti工作流配置
*/
@Configuration
public class Cfg_Activiti extends Cfg_EnvProvider{
//流程配置,與spring整合采用SpringProcessEngineConfiguration這個(gè)實(shí)現(xiàn)
@Bean
public ProcessEngineConfiguration processEngineConfiguration(DataSource dataSource, PlatformTransactionManager transactionManager){
SpringProcessEngineConfiguration processEngineConfiguration = new SpringProcessEngineConfiguration();
processEngineConfiguration.setDataSource(dataSource);
processEngineConfiguration.setDatabaseSchemaUpdate("true");
processEngineConfiguration.setDatabaseType("mysql");
processEngineConfiguration.setTransactionManager(transactionManager);
return processEngineConfiguration;
}
//流程引擎,與spring整合使用factoryBean
@Bean
public ProcessEngineFactoryBean processEngine(ProcessEngineConfiguration processEngineConfiguration){
ProcessEngineFactoryBean processEngineFactoryBean = new ProcessEngineFactoryBean();
processEngineFactoryBean.setProcessEngineConfiguration((ProcessEngineConfigurationImpl) processEngineConfiguration);
return processEngineFactoryBean;
}
//八大接口
@Bean
public RepositoryService repositoryService(ProcessEngine processEngine){
return processEngine.getRepositoryService();
}
@Bean
public RuntimeService runtimeService(ProcessEngine processEngine){
return processEngine.getRuntimeService();
}
@Bean
public TaskService taskService(ProcessEngine processEngine){
return processEngine.getTaskService();
}
@Bean
public HistoryService historyService(ProcessEngine processEngine){
return processEngine.getHistoryService();
}
@Bean
public FormService formService(ProcessEngine processEngine){
return processEngine.getFormService();
}
@Bean
public IdentityService identityService(ProcessEngine processEngine){
return processEngine.getIdentityService();
}
@Bean
public ManagementService managementService(ProcessEngine processEngine){
return processEngine.getManagementService();
}
@Bean
public DynamicBpmnService dynamicBpmnService(ProcessEngine processEngine){
return processEngine.getDynamicBpmnService();
}
//八大接口 end
}
配置主要由兩大部分:
一個(gè)是ProcessEngineConfiguration,這個(gè)是activiti基礎(chǔ)參數(shù)的配置,如:數(shù)據(jù)源什么的。
還有一個(gè)是activiti的八個(gè)service接口,這是使用activiti的關(guān)鍵,每個(gè)接口都有不同的職責(zé)。而這些接口需要通過ProcessEngine來獲取,activiti為了和spring整合提供了ProcessEngineFactroyBean,可通過它來獲取ProcessEngin。
RepositoryService:提供與流程定義相關(guān)的方法,可查詢模型(model)、流程定義(process definition)、流程部署(deployment)。
RuntimeService:提供流程執(zhí)行時(shí)相關(guān)的方法,可查詢流程實(shí)例(process insatnce)、執(zhí)行實(shí)例(execution),可開啟流程實(shí)例。
TaskService:提供任務(wù)相關(guān)的方法,可進(jìn)行查詢、指派、完成任務(wù)等操作。
HistoriyService:提供歷史記錄相關(guān)的方法,可查詢歷史任務(wù)(historic task instance),歷史流程實(shí)例(historic process instance)等。
FormService:提供表單相關(guān)的方法,一個(gè)用戶任務(wù)可對應(yīng)一個(gè)formkey,可通過formkey查找表單,提供表單的獲取等方法。
IdentityService:提供用戶權(quán)限認(rèn)證相關(guān)的方法,可查詢用戶、組等信息,可設(shè)置當(dāng)前用戶。
ManagementService:與引擎配置相關(guān),可獲取引擎數(shù)據(jù)庫信息,并且可以執(zhí)行自定義的命令(command)。
DynamicBpmnService:提供動(dòng)態(tài)獲取,以及動(dòng)態(tài)修改流程定義的方法。
配置好了這些,activiti的基本配置就完成了,現(xiàn)在就可以在程序中通過注入來得到各種service的實(shí)例。
一個(gè)流程控制中心程序,基本上就是這幾個(gè)service配合使用來實(shí)現(xiàn)的,所以搭好基礎(chǔ)環(huán)境后,就可以開始編寫自己的流程控制中心了。
最后分享一個(gè)大佬的主頁,學(xué)習(xí)activiti可以去看看。里面有demo程序。
http://www.kafeitu.me/activiti.html
activiti version 5.22.0
spring boot version 1.5.1