一. 背景
現(xiàn)在很多項目流程上比較復(fù)雜,業(yè)務(wù)上不復(fù)雜,對于這種項目,引入流程引擎會比較合適,流程有流程引擎去做管理,讓設(shè)計更合理,開發(fā)更簡單。市面上有很多款流程引擎,本人選用了使用率比較廣的流程引擎activiti。
activiti現(xiàn)在最高版本已經(jīng)到7,springboot最高版本是6,由于網(wǎng)絡(luò)上5.22版本資料最多,所以選用了5.22版本作為項目集成。
二. activiti自帶表介紹

不同版本的activiti自帶表是不一樣的,其實我們也不用去關(guān)心不同版本的activiti需要那些表,只要配置好數(shù)據(jù)源,系統(tǒng)啟動的時候,會去檢查數(shù)據(jù)庫是否包含這些數(shù)據(jù)庫表,如果沒有會自動去創(chuàng)建這些表。下面先介紹簡單介紹一下,這些表的含義。
表含義介紹博客(引用):https://blog.csdn.net/jack_eusong/article/details/79411053
表關(guān)系圖介博客(引用):https://blog.csdn.net/claram/article/details/73277358
日志表:
1. act_evt_log 存儲事件處理日志,方便管理員跟蹤處理。
通用數(shù)據(jù)表
2. act_ge_bytearray 二進制數(shù)據(jù)表,一些文件存在這個表。
3. act_ge_property 屬性數(shù)據(jù)表存儲整個流程引擎級別的數(shù)據(jù),初始化表結(jié)構(gòu)時,會默認插入三條記錄
歷史數(shù)據(jù)表
4. act_hi_actinst 歷史節(jié)點表
5. act_hi_attachment 歷史附件表
6. act_hi_comment 歷史意見表
7. act_hi_detail 歷史詳情表,提供歷史變量的查詢
8. act_hi_identitylink 歷史流程人員表
9. act_hi_procinst 歷史流程實例表
10.act_hi_taskinst 歷史任務(wù)實例表
11.act_hi_varinst 歷史變量表
用戶組織表
12.act_id_group 用戶組信息表
13.act_id_info 用戶擴展信息表
14.act_id_membership 用戶與用戶組對應(yīng)信息表
15.act_id_user 用戶信息表
資源流程規(guī)則表
16.act_procdef_info 流程定義信息
17.act_re_deployment 部署信息表
18.act_re_model 流程設(shè)計模型部署表
19.act_re_procdef 流程定義數(shù)據(jù)表
運行時數(shù)據(jù)庫表
20.act_ru_event_subscr 監(jiān)聽表
21.act_ru_execution 運行時流程執(zhí)行實例表
22.act_ru_identitylink 運行時流程人員表,主要存儲任務(wù)節(jié)點與參與者的相關(guān)信息
23.act_ru_job 運行時定時任務(wù)數(shù)據(jù)表
24.act_ru_task 運行時任務(wù)節(jié)點表
25.act_ru_variable 運行時流程變量數(shù)據(jù)表
三. activiti與springboot集成
項目通過maven構(gòu)建,所以去要引入activiti相關(guān)jar。
<groupId>org.activiti</groupId> <artifactId>activiti-spring-boot-starter-basic</artifactId> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> <artifactId>mysql-connector-java</artifactId>
在定義activiti配置
public class ActivitiConfig implements ProcessEngineConfigurationConfigurer { public void configure(SpringProcessEngineConfiguration processEngineConfiguration) { processEngineConfiguration.setActivityFontName("宋體"); processEngineConfiguration.setLabelFontName("宋體"); processEngineConfiguration.setAnnotationFontName("宋體"); processEngineConfiguration.setDbIdentityUsed(false); processEngineConfiguration.setDatabaseSchemaUpdate("true");
processEngineConfiguration.setDbIdentityUsed(false);
這段代碼表示是否使用activiti自帶用戶組織表,如果是,這里為true,如果不是,這里為false。由于本項目使用了視圖的方式代替了原有的用戶組織表,所以這里設(shè)置為false,這樣啟動就不用去檢查用戶組織表是否存在。
processEngineConfiguration.setDatabaseSchemaUpdate("true");
這段代碼表示啟動的時候是否去創(chuàng)建表,如果第一次啟動這里必須設(shè)置為true
然后再springboot全局配置文件application.yml 配置,表示關(guān)閉驗證自動部署,不關(guān)閉每次啟動都會去部署resources/processes文件夾下面的所有資源文件
check-process-definitions: false
以上就是springboot和activiti的集成了,啟動springboot后,activiti也會相應(yīng)的運行起來。
四. activiti畫圖工具的集成
1. 可以在eclipse中集成Activiti Designer插件,然后可以進行畫圖
插件安裝博客(引用):https://www.cnblogs.com/strinkbug/p/4876819.html

2. 可以引入官方的畫圖工具,然后進行畫圖
官方的畫圖工具集成博客(引用):http:///activiti/126.html

個人建議引入官方畫圖工具,這樣畫圖信息是存在activiti自有表中,如果要發(fā)布也是比較簡單的,直接點擊發(fā)布即可。

點擊發(fā)布過,會在流程資源中出現(xiàn)相應(yīng)的資源信息

如果在其他途徑畫的圖,比如eclipse,可以把相應(yīng)的資源文件直接導(dǎo)入即可

五. 官方畫圖工具的集成
上面給出了官方畫圖工具集成的博客,這里有幾個地方需要注意的,如果權(quán)限組件沒有集成spring-security,需要排除相關(guān)引用
<groupId>org.activiti</groupId> <artifactId>activiti-modeler</artifactId> <groupId>org.springframework.security</groupId> <artifactId>spring-security-config</artifactId> <groupId>org.springframework.security</groupId> <artifactId>spring-security-crypto</artifactId> <groupId>org.springframework.security</groupId> <artifactId>spring-security-web</artifactId> <groupId>org.activiti</groupId> <artifactId>activiti-diagram-rest</artifactId> <groupId>org.springframework.security</groupId> <artifactId>spring-security-config</artifactId> <groupId>org.springframework.security</groupId> <artifactId>spring-security-crypto</artifactId> <groupId>org.springframework.security</groupId> <artifactId>spring-security-web</artifactId>
且,springboot啟動的時候,需要加上@SpringBootApplication(exclude = SecurityAutoConfiguration.class)
@SpringBootApplication(exclude = SecurityAutoConfiguration.class) @EnableTransactionManagement //啟用事務(wù) @ComponentScan(basePackages = "yui") public class ActivitiWebApplication { public static void main(String[] args) { ApplicationContext app = SpringApplication.run(ActivitiWebApplication.class, args); SpringContextUtils.setApplicationContext(app);
總結(jié)
流程引擎使用的時候會帶來便利性,但是使用不當(dāng)也會帶來復(fù)雜度。
|