為了深入得學(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)。
為什么要用工作流引擎题篷?
簡(jiǎn)單來說词身,就是為了統(tǒng)一管理流程業(yè)務(wù)。
想想看番枚,如果要設(shè)計(jì)一個(gè)流程的程序法严,通常需要在數(shù)據(jù)庫中存各種狀態(tài)值,比如一個(gè)訂單程序葫笼,要標(biāo)記訂單是未付款深啤、已付款、已出庫等等狀態(tài)路星,而這些各種各樣的狀態(tài)參雜在程序中溯街,邏輯自然就變得復(fù)雜了。
而將這些狀態(tài)對(duì)應(yīng)流程里的一個(gè)個(gè)步驟奥额,交由流程引擎去管理苫幢,這樣不僅簡(jiǎn)化了業(yè)務(wù)邏輯代碼访诱,而且垫挨,還有很強(qiáng)的擴(kuò)展性。我可以修改我的流程触菜,我可以添加一些步驟而不用改我的數(shù)據(jù)庫表結(jié)構(gòu)九榔,不用改我的業(yè)務(wù)邏輯。
在spring boot中使用activiti api
spring boot的初始配置請(qǐng)參考:
http://www.reibang.com/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ù)可對(duì)應(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