因工做須要,接手新的項目,其中用到了activiti實現的工做流,特地去大體學習下,特此記錄下。java
1.acticiti5框架說明及表結構介紹mysql
Activiti5工做流引擎框架: 它其實是一個javaEE的半成品項目(企業通常用它來作二次開發).
-- dao層.
-- service層.
-- 它有數據庫表(24表). Activiti5.18,全部表都是以act開頭
-- Activiti5底層用得持久層框架是MyBatis3,
它有本身的數據庫表,提供了七個核心業務服務類.web
ACT_RE_* :'RE' 表示 repository(存儲庫)。資源庫流程規則表。這個前綴的表包含了流程定義和流程靜態資源(圖片、規則 等)spring
act_re_deployment | 部署信息表 |
act_re_model | 流程設計模型部署表 |
act_re_prodef | 流程定義數據表sql |
ACT_RU_* :'RU’ 表示 runtime(運行時)。運行時數據庫表。這些運行時的表,數據庫
包含流程實例、任務、變量、異步任務 等運行中的數據。api
這樣運行時表能夠一直很小數據很快。spring-mvc
act_ru_execution | 運行時流程執行實例表 |
act_ru_identitylink | 運行時流程人員表,主要存儲任務節點與參與者的相關信息 |
act_ru_lask | 運行時任務節點表 |
act_ru_variable | 運行時流程變量數據表 |
ACT_ID_* :'ID' 表示 identity(身份)。組織機構表。mvc
這些表包含了身份信息,好比用戶、組 等。框架
act_id_group | 用戶組信息表 |
act_id_info | 用戶擴展信息表 |
act_id_membership | 用戶與用戶組對應信息表 |
act_id_user | 用戶信息表 |
ACT_HI_* :'HI' 表示 history(歷史)。歷史數據庫表。這些表包含歷史數據,
好比歷史流程實例,變量、任務 等。
act_hi_actinst | 歷史節點表 |
act_hi_attachment | 歷史附件表 |
act_hi_comment | 歷史意見表 |
act_hi_identitylink | 歷史流程人員表 |
act_hi_detail | 歷史詳情表,提供歷史變量查詢 |
act_hi_procinst | 歷史流程實例表 |
act_hi_tasking | 歷史任務實例表 |
act_hi_varinst | 歷史變量表 |
ACT_GE_* :'GE' 表示 general(廣泛的)。通用數據表。
用於不一樣場景下,如存放資源文件。
act_ge_bytearry | 二進制數據表 |
act_ge_property | 屬性數據表, |
還有一個log表act_evt_log
2.下載及安裝使用
官網地址:http://www.activiti.org
下載 activiti-5.18.0.zip
解壓後:
database : (數據庫相關)存放了Activiti框架的sql語句.
docs: api文檔、用戶指南、xsd
libs: 存放了本身全部的jar.
wars: web應用.
1)安裝數據庫,生成表
執行如下腳本
-- activiti.mysql55.create.engine.sql
-- activiti.mysql55.create.history.sql
-- activiti.mysql.create.identity.sql
2)集成spring
引用maven
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-engine</artifactId>
<version>5.18.0</version>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring</artifactId>
<version>5.18.0</version>
</dependency>
3)配置activiti.xml配置,配置jdbc,及上一步生成的庫的連接路徑,注入activiti服務接口
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:task="http://www.springframework.org/schema/task"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.0.xsd">
<!-- 加載activiti引擎 -->
<bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
<!-- 鏈接數據的配置 -->
<property name="jdbcDriver" value="${jdbc.driverClassName}"></property>
<property name="jdbcUrl" value="${jdbc.url}"></property>
<property name="jdbcUsername" value="${jdbc.username}"></property>
<property name="jdbcPassword" value="${jdbc.password}"></property>
<property name="activityFontName" value="宋體"/>
<property name="labelFontName" value="宋體"/>
<property name="jdbcPingEnabled" value="true"></property>
<property name="jdbcMaxActiveConnections" value="1000"></property>
<property name="jdbcMaxIdleConnections" value="200"></property>
<property name="jdbcMaxCheckoutTime" value="20000"></property>
<property name="jdbcPingConnectionNotUsedFor" value="3600000"></property>
</bean>
<bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean">
<property name="processEngineConfiguration" ref="processEngineConfiguration" />
</bean>
<!-- activiti的各類服務接口 -->
<bean id="repositoryService" factory-bean="processEngine"
factory-method="getRepositoryService" />
<bean id="runtimeService" factory-bean="processEngine"
factory-method="getRuntimeService" />
<bean id="taskService" factory-bean="processEngine"
factory-method="getTaskService" />
<bean id="historyService" factory-bean="processEngine"
factory-method="getHistoryService" />
<bean id="managementService" factory-bean="processEngine"
factory-method="getManagementService" />
<bean id="IdentityService" factory-bean="processEngine"
factory-method="getIdentityService" />
<bean id="formService" factory-bean="processEngine"
factory-method="getFormService" />
</beans>
其中核心api說明以下:
ProcessEngineConfiguration.流程引擎配置信息類.
屬性的設置、構建流程引擎.
ProcessEngine: 流程引擎.
獲取七個業務處理類.
RepositoryService倉儲服務:
act_re_*、act_ge_*
RuntimeService運行時服務
act_ru_*
TaskService任務服務
act_ru_*
FormService表單服務
IdentityService身份服務
act_id_*
HistoryService歷史服務
act_hi_*
ManagementService管理服務.
act_id_*、act_evt_log
3.插件安裝
idea能夠安裝actiBPM
而後能夠建立bpm流程文件
4.activiti的代碼實現
1)部署bmp流程,使得其流程保存到數據庫字段中
RepositoryService repositoryService = processEngine.getRepositoryService(); Deployment deployment = repositoryService.createDeployment() .addClasspathResource("onboarding.bpmn20.xml").deploy();
2)開始流程,結束流程,查詢歷史流程,查詢流程節點狀態等都是調用核心api便可,具體能夠參考activiti中接口方法,參照使用。
相似以下:
/**查詢歷史任務*/List<HistoricTaskInstance> list = historyService.createHistoricTaskInstanceQuery() .taskAssignee(request.getData().getAssignee()) .finished().processFinished() .processDefinitionNameLike(processDefinitionName) .orderByHistoricTaskInstanceEndTime() .desc() .listPage(request.getData().getFirstResult(), request.getData().getMaxResults())總而言之,activiti就是爲咱們封裝了一套流程流轉的邏輯,包括裏面實現的邏輯和節點數據的保存,而後封裝了sql的語法上封裝了本身的語言來查詢和添加數據,開始和結束流程也只是對數據的新增和修改,至於查看流程流轉流程則只是對一系列數據的查詢,大致如此了,想明白這些,也就不是什麼神祕難懂的東西了。