activiti5.22 springboot 流程引擎 實戰全過程
一. 背景
現在很多專案流程上比較複雜,業務上不復雜,對於這種專案,引入流程引擎會比較合適,流程有流程引擎去做管理,讓設計更合理,開發更簡單。市面上有很多款流程引擎,本人選用了使用率比較廣的流程引擎activiti。
activiti現在最高版本已經到7,springboot最高版本是6,由於網路上5.22版本資料最多,所以選用了5.22版本作為專案整合。
二. activiti自帶表介紹
不同版本的activiti自帶表是不一樣的,其實我們也不用去關心不同版本的activiti需要那些表,只要配置好資料來源,系統啟動的時候,會去檢查資料庫是否包含這些資料庫表,如果沒有會自動去建立這些表。下面先介紹簡單介紹一下,這些表的含義。
日誌表:
1. act_evt_log 儲存事件處理日誌,方便管理員跟蹤處理。
通用資料表
2. act_ge_bytearray 二進位制資料表,一些檔案存在這個表。
3. act_ge_property 屬性資料表儲存整個流程引擎級別的資料,初始化表結構時,會預設插入三條記錄
歷史資料表
4. act_hi_actinst 歷史節點表
5. act_hi_attachment 歷史附件表
6. act_hi_comment 歷史意見表
7. act_hi_detail 歷史詳情表,提供歷史變數的查詢
8. act_hi_identitylink 歷史流程人員表
9. act_hi_procinst 歷史流程例項表
10.act_hi_taskinst 歷史任務例項表
11.act_hi_varinst 歷史變量表
使用者組織表
12.act_id_group 使用者組資訊表
13.act_id_info 使用者擴充套件資訊表
14.act_id_membership 使用者與使用者組對應資訊表
15.act_id_user 使用者資訊表
資源流程規則表
16.act_procdef_info 流程定義資訊
17.act_re_deployment 部署資訊表
18.act_re_model 流程設計模型部署表
19.act_re_procdef 流程定義資料表
執行時資料庫表
20.act_ru_event_subscr 監聽表
21.act_ru_execution 執行時流程執行例項表
22.act_ru_identitylink 執行時流程人員表,主要儲存任務節點與參與者的相關資訊
23.act_ru_job 執行時定時任務資料表
24.act_ru_task 執行時任務節點表
25.act_ru_variable 執行時流程變數資料表
三. activiti與springboot整合
專案通過maven構建,所以去要引入activiti相關jar。
<dependency> <groupId>org.activiti</groupId> <artifactId>activiti-spring-boot-starter-basic</artifactId> <version>5.22</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency>
在定義activiti配置
@Component
public class ActivitiConfig implements ProcessEngineConfigurationConfigurer {
@Override
public void configure(SpringProcessEngineConfiguration processEngineConfiguration) {
processEngineConfiguration.setActivityFontName("宋體");
processEngineConfiguration.setLabelFontName("宋體");
processEngineConfiguration.setAnnotationFontName("宋體");
processEngineConfiguration.setDbIdentityUsed(false);
processEngineConfiguration.setDatabaseSchemaUpdate("true");
}
}
processEngineConfiguration.setDbIdentityUsed(false);
這段程式碼表示是否使用activiti自帶使用者組織表,如果是,這裡為true,如果不是,這裡為false。由於本專案使用了檢視的方式代替了原有的使用者組織表,所以這裡設定為false,這樣啟動就不用去檢查使用者組織表是否存在。
processEngineConfiguration.setDatabaseSchemaUpdate("true");
這段程式碼表示啟動的時候是否去建立表,如果第一次啟動這裡必須設定為true
然後再springboot全域性配置檔案application.yml 配置,表示關閉驗證自動部署,不關閉每次啟動都會去部署resources/processes資料夾下面的所有資原始檔
spring:
activiti:
check-process-definitions: false
以上就是springboot和activiti的集成了,啟動springboot後,activiti也會相應的執行起來。
四. activiti畫圖工具的整合
1. 可以在eclipse中整合Activiti Designer外掛,然後可以進行畫圖
2. 可以引入官方的畫圖工具,然後進行畫圖
個人建議引入官方畫圖工具,這樣畫圖資訊是存在activiti自有表中,如果要釋出也是比較簡單的,直接點擊發布即可。
點擊發布過,會在流程資源中出現相應的資源資訊
如果在其他途徑畫的圖,比如eclipse,可以把相應的資原始檔直接匯入即可
五. 官方畫圖工具的整合
上面給出了官方畫圖工具整合的部落格,這裡有幾個地方需要注意的,如果許可權元件沒有整合spring-security,需要排除相關引用
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-modeler</artifactId>
<version>5.22</version>
<exclusions>
<exclusion>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-crypto</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-diagram-rest</artifactId>
<version>5.22</version>
<exclusions>
<exclusion>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-crypto</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
</exclusion>
</exclusions>
</dependency>
且,springboot啟動的時候,需要加上@SpringBootApplication(exclude = SecurityAutoConfiguration.class)
@SpringBootApplication(exclude = SecurityAutoConfiguration.class)
@EnableAsync
@EnableTransactionManagement //啟用事務
@ComponentScan(basePackages = "yui")
public class ActivitiWebApplication {
public static void main(String[] args) {
ApplicationContext app = SpringApplication.run(ActivitiWebApplication.class, args);
SpringContextUtils.setApplicationContext(app);
}
}
總結
流程引擎使用的時候會帶來便利性,但是使用不當也會帶來複雜度。