Activiti 快速入門教程:SpringBoot 集成 Activiti6 + Activiti Modeler 流程配置可視化
7大服務與核心表
23張表概覽
Activiti使用到的表都是ACT_開頭的。
PS:表中參數具體意思,請直接看轉載
ACT_RE_*
:
RE 表示repository(存儲),RepositoryService接口所操作的表。帶此前綴的表包含的是靜態信息,如,流程定義,流程的資源(圖片,規則等)。
ACT_RU_*
:
RU 表示runtime,運行時表-RuntimeService。這是運行時的表存儲着流程變量,用戶任務,變量,職責(job)等運行時的數據。Activiti只存儲實例執行期間的運行時數據,當流程實例結束時,將刪除這些記錄。這就保證了這些運行時的表小且快。
ACT_ID_*
:
ID 表示identity (組織機構),IdentityService接口所操作的表。用戶記錄,流程中使用到的用戶和組。這些表包含標識的信息,如用戶,用戶組,等等。
ACT_HI_*
:
HI 表示history,歷史數據表,HistoryService。就是這些表包含着流程執行的歷史相關數據,如結束的流程實例,變量,任務,等等
ACT_GE_*
:
全局通用數據及設置(general),各種情況都使用的數據。
序號 | 表名 | 說明 |
---|---|---|
1 | act_ge_bytearray | 二進制數據表 |
2 | act_ge_property | 二屬性數據表存儲整個流程引擎級別的數據,初始化表結構時,會默認插入三條記錄數據表 |
3 | act_hi_actinst | 歷史節點表 |
4 | act_hi_attachment | 歷史附件表 |
5 | act_hi_comment | 歷史意見表 |
6 | act_hi_identitylink | 歷史流程人員表 |
7 | act_hi_detail | 歷史詳情表,提供歷史變量的查詢 |
8 | act_hi_procinst | 歷史流程實例表 |
9 | act_hi_taskinst | 歷史任務實例表 |
10 | act_hi_varinst | 歷史變量表 |
11 | act_id_group | 用戶組信息表 |
12 | act_id_info | 用戶擴展信息表 |
13 | act_id_membership | 用戶與用戶組對應信息表 |
14 | act_id_user | 用戶信息表 |
15 | act_re_deployment | 部署信息表 |
16 | act_re_model | 流程設計模型部署表 |
17 | act_re_procdef | 流程定義數據表 |
18 | act_ru_event_subscr | throwEvent、catchEvent時間監聽信息表 |
19 | act_ru_execution | 運行時流程執行實例表 |
20 | act_ru_identitylink | 運行時流程人員表,主要存儲任務節點與參與者的相關信息 |
21 | act_ru_job | 運行時定時任務數據表 |
22 | act_ru_task | 運行時任務節點表 |
23 | act_ru_variable | 運行時流程變量數據表 |
7大核心服務(重要)
所謂核心服務,就是通過調用服務中開放的接口,去獲取自己所需要的數據,甚至改變流程
服務名稱 | 描述 |
---|---|
RepositoryService | Activiti 中每一個不同版本的業務流程的定義都需要使用一些定義文件,部署文件和支持數據 ( 例如 BPMN2.0 XML 文件,表單定義文件,流程定義圖像文件等 ),這些文件都存儲在 Activiti 內建的 Repository 中。Repository Service 提供了對 repository 的存取服務。 |
RuntimeService | 在 Activiti 中,每當一個流程定義被啟動一次之后,都會生成一個相應的流程對象實例。Runtime Service 提供了啟動流程、查詢流程實例、設置獲取流程實例變量等功能。此外它還提供了對流程部署,流程定義和流程實例的存取服務。 |
TaskService | 在 Activiti 中業務流程定義中的每一個執行節點被稱為一個 Task,對流程中的數據存取,狀態變更等操作均需要在 Task 中完成。Task Service 提供了對用戶 Task 和 Form 相關的操作。它提供了運行時任務查詢、領取、完成、刪除以及變量設置等功能。 |
HistoryService | History Service 用於獲取正在運行或已經完成的流程實例的信息,與 Runtime Service 中獲取的流程信息不同,歷史信息包含已經持久化存儲的永久信息,並已經被針對查詢優化。 |
IdentityService | Activiti 中內置了用戶以及組管理的功能,必須使用這些用戶和組的信息才能獲取到相應的 Task。Identity Service 提供了對 Activiti 系統中的用戶和組的管理功能。 |
FormService | Activiti 中的流程和狀態 Task 均可以關聯業務相關的數據。通過使用 Form Service 可以存取啟動和完成任務所需的表單數據並且根據需要來渲染表單。 |
ManagementService | Management Service 提供了對 Activiti 流程引擎的管理和維護功能,這些功能不在工作流驅動的應用程序中使用,主要用於 Activiti 系統的日常維護。 |
加依賴
<!-- Activity --> <dependency> <groupId>org.activiti</groupId> <artifactId>activiti-engine</artifactId> <version>6.0.0</version> </dependency>
- 1
- 2
- 3
- 4
- 5
內部日志
Activiti 使用 SLF4J
作為內部日志框架。在這個例子中,我們使用 log4j
作為 SLF4J
的實現。
加依賴
<!-- 日志 --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.21</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.21</version> </dependency>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
resource
目錄下新建文件 log4j.properties
log4j.rootLogger=DEBUG, ACT log4j.appender.ACT=org.apache.log4j.ConsoleAppender log4j.appender.ACT.layout=org.apache.log4j.PatternLayout log4j.appender.ACT.layout.ConversionPattern= %d{hh:mm:ss,SSS} [%t] %-5p %c %x - %m%n
- 1
- 2
- 3
初始化 ProcessEngine
代碼初始化
// 流程引擎配置 ProcessEngineConfiguration cfg = new StandaloneProcessEngineConfiguration() .setJdbcUrl(url) .setJdbcUsername(username) .setJdbcPassword(password) .setJdbcDriver(driverClassName) // 初始化基礎表,不需要的可以改為 DB_SCHEMA_UPDATE_FALSE .setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE); // 初始化流程引擎對象 ProcessEngine processEngine = cfg.buildProcessEngine();
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
activiti.cfg.xml 初始化
代碼部分
// 流程引擎配置 ProcessEngineConfiguration cfg = ProcessEngineConfiguration // 根據文件名獲取配置文件 //.createProcessEngineConfigurationFromResource("activiti.cfg.xml"); // 獲取默認配置文件,默認的就是 activiti.cfg.xml .createProcessEngineConfigurationFromResourceDefault() // 初始化基礎表,不需要的可以改為 DB_SCHEMA_UPDATE_FALSE .setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE); // 初始化流程引擎對象 ProcessEngine processEngine = cfg.buildProcessEngine();
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
新建 activiti.cfg.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration"> <property name="jdbcUrl" value="jdbc:mysql://127.0.0.1:3306/test"/> <property name="jdbcDriver" value="com.mysql.jdbc.Driver"/> <property name="jdbcUsername" value="root"/> <property name="jdbcPassword" value="123456"/> <property name="databaseSchemaUpdate" value="true"/> </bean> </beans>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
我的初始化示例
我的配置文件 ProcessEngineConfig.java
依賴
spring-boot-configuration-processor
加載配置文件lomok
簡化 java 代碼
<!-- 配置文件處理器 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> </dependency> <!-- lombok --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.0</version> <scope>provided</scope> </dependency>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
核心的 7 大服務在這里注冊成 bean
后,之后就可以直接使用了
/** * 流程引擎配置文件 * @author: linjinp * @create: 2019-10-21 16:49 **/ @Configuration @ConfigurationProperties(prefix = "spring.datasource") @Data public class ProcessEngineConfig { private Logger logger = LoggerFactory.getLogger(DruidDatsSourceConfig.class); // 從 yml 配置文件中獲取 mysql 配置信息 @Value("${spring.datasource.url}") private String url; @Value("${spring.datasource.driver-class-name}") private String driverClassName; @Value("${spring.datasource.username}") private String username; @Value("${spring.datasource.password}") private String password; @Value("${spring.datasource.publicKey}") private String publicKey; /** * 初始化流程引擎 * @return */ @Primary @Bean public ProcessEngine initProcessEngine() { logger.info("=============================ProcessEngineBegin============================="); // 流程引擎配置 ProcessEngineConfiguration cfg = null; try { cfg = new StandaloneProcessEngineConfiguration() .setJdbcUrl(url) .setJdbcUsername(username) // 對密碼進行解密 .setJdbcPassword(ConfigTools.decrypt(publicKey, password)) .setJdbcDriver(driverClassName) // 初始化基礎表,不需要的可以改為 DB_SCHEMA_UPDATE_FALSE .setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE) // 默認郵箱配置 // 發郵件的主機地址,先用 QQ 郵箱 .setMailServerHost("smtp.qq.com") // POP3/SMTP服務的授權碼 .setMailServerPassword("xxxxxxx") // 默認發件人 .setMailServerDefaultFrom("836369078@qq.com") // 設置發件人用戶名 .setMailServerUsername("管理員"); } catch (Exception e) { e.printStackTrace(); } // 初始化流程引擎對象 ProcessEngine processEngine = cfg.buildProcessEngine(); logger.info("=============================ProcessEngineEnd============================="); return processEngine; } //八大接口 // 業務流程的定義相關服務 @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