1. 程式人生 > >activiti5.22 springboot 流程引擎 實戰全過程

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);
    }
    
}

總結

    流程引擎使用的時候會帶來便利性,但是使用不當也會帶來複雜度。