需要引入的POM依賴
<!-- activiti依賴包 -->
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-engine</artifactId>
<version>5.21.0</version>
</dependency>
<!-- 整合Spring使用的Jar包 -->
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring</artifactId>
<version>5.21.0</version>
</dependency>
1、建立工作流 25張表
// 建立表
@Test
public void createTable() {
// 執行個體化流程對象
ProcessEngineConfiguration pec = ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration();
// 初始化資料庫連接配接
pec.setJdbcDriver("oracle.jdbc.driver.OracleDriver");
pec.setJdbcUrl("jdbc:oracle:thin:@127.0.0.1:1521:orcl");
pec.setJdbcUsername("oa");
pec.setJdbcPassword("oa");
/**
* DB_SCHEMA_UPDATE_FALSE : 不能自動建立表, 需要表存在
* DB_SCHEMA_UPDATE_TRUE : 如果表不存在,自動建立表
* DB_SCHEMA_UPDATE_CREATE_DROP : 先删除表再建立表
*/
pec.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
// 工作流核心對象
ProcessEngine processEngine = pec.buildProcessEngine();
System.out.println("processEngine:"+processEngine);
}
2、 通過配置檔案,建立工作流所需要的25張表
activiti.cfg.xml 檔案
<bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
<property name="jdbcDriver" value="oracle.jdbc.driver.OracleDriver"></property>
<property name="jdbcUrl" value="jdbc:oracle:thin:@127.0.0.1:1521:orcl"></property>
<property name="jdbcUsername" value="oa"></property>
<property name="jdbcPassword" value="oa"></property>
<property name="databaseSchemaUpdate" value="true"></property>
</bean>
// 通過配置檔案,建立流程引擎需要的25張表
@Test
public void createTableByConfig() {
// 執行個體化流程對象
ProcessEngineConfiguration pec = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml");
// 工作流核心對象
ProcessEngine processEngine = pec.buildProcessEngine();
System.out.println("processEngine:"+processEngine);
}
3、簡單的流程配置
/**
* 工作流入門執行個體
* @author PL
*
*/
public class HelloWord {
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
// 部署流程定義
@Test
public void deploymentProcessDefine() {
Deployment deployMent = processEngine.getRepositoryService()
.createDeployment() // 建立流程部署對象
.name("01流程定義")
.addClasspathResource("diagrams/FirstTask.bpmn")
.addClasspathResource("diagrams/FirstTask.png")
.deploy(); // 完成部署
System.out.println(deployMent.getId()); // 01
System.out.println(deployMent.getName()); // 01流程定義
System.out.println(JSON.toJSON(deployMent));
}
// 啟動流程執行個體
@Test
public void startProcessInstance() {
String key = "helloword";
ProcessInstance pi = processEngine.getRuntimeService()
.startProcessInstanceByKey(key);
System.out.println(pi.getId()); // 2501
System.out.println(pi.getProcessDefinitionId()); //helloword:1:4
System.out.println(JSON.toJSONString(pi));
}
// 查詢目前人的個人任務
@Test
public void findMyPersonTask() {
String assign = "李四";
List<Task> list = processEngine.getTaskService()
.createTaskQuery()
.taskAssignee(assign)
.list();
if(null != list && list.size()>0) {
for (Task task : list) {
System.out.println("任務id:"+task.getId()); // 2504
System.out.println("任務辦理人:"+task.getAssignee());
System.out.println("任務名稱:"+task.getName());
System.out.println("任務建立時間:"+task.getCreateTime());
System.out.println("流程執行個體:"+task.getProcessInstanceId()); //2501
System.out.println("執行對象Id:"+task.getExecutionId()); //2501
}
}
}
// 完成我的任務
@Test
public void finishMyTask() {
String taskId = "2504";
processEngine.getTaskService()
.complete(taskId);
System.out.println("完成任務,任務ID:"+taskId); // 2504
}
}
4、流程定義詳解
/**
* 流程定義Test
* @author Pl
*
*/
public class ProcessDefinitionTest {
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
/**
* 部署流程定義
* ACT_RE_DEPLOYMENT 部署對象表 ,部署的對象簡要資訊
* ACT_RE_PROCDEF 流程定義表 , 裡面包含部署Id, key , version
* ACT_GE_BYTEARRAY : 資源檔案表
*/
@Test
public void deploymentProcessDefine() {
Deployment deployMent = processEngine.getRepositoryService()
.createDeployment() // 建立流程部署對象
.name("流程定義")
.addClasspathResource("diagrams/FirstTask.bpmn")
.addClasspathResource("diagrams/FirstTask.png")
.deploy(); // 完成部署
System.out.println(deployMent.getId()); // 01 //7501
System.out.println(deployMent.getName()); // 01流程定義
System.out.println(JSON.toJSON(deployMent));
}
/**
* 查詢流程定義
*/
@Test
public void findProcessDefined() {
List<ProcessDefinition> list = processEngine.getRepositoryService()
.createProcessDefinitionQuery()
// .deploymentId(deploymentId) // 部署對象Id查詢
// .processDefinitionId(processDefinitionId) //流程定義Id
// .processDefinitionKey(processDefinitionKey) // 流程定義Key
// .processDefinitionKeyLike("") // 模糊查詢
// .orderByDeploymentId().desc(); // 排序
.list(); // 傳回一個集合
// .singleResult(); // 傳回唯一結果值
// .listPage(firstResult, maxResults); // 分頁查詢
if(null != list) {
for (ProcessDefinition processDefinition : list) {
System.out.println("流程定義Id"+processDefinition.getId());
System.out.println("流程定義名稱"+processDefinition.getName()); // 對應.bpmn中的name屬性
System.out.println("流程定義Key"+processDefinition.getKey()); // 對應.bpmn中 id
System.out.println("流程定義版本"+processDefinition.getVersion()); //相同Key , 版本更新
}
}
}
/**
* 删除流程定義
*/
@Test
public void deleteProcessDefined() {
String deploymentId = "1";
processEngine.getRepositoryService()
// .deleteDeployment(deploymentId); // 不能級聯删除,隻能删除沒有啟動的流程,如果啟動,抛出異常
.deleteDeployment(deploymentId,true); // 級聯删除, 強制删除
System.out.println("删除成功");
}
// 導入zip 檔案
@Test
public void deploymentProcessDefinition_zip() {
InputStream in = this.getClass().getClassLoader()
.getResourceAsStream("diagrams/helloworld.zip");
ZipInputStream zipInputStream = new ZipInputStream(in);
Deployment deployment = processEngine.getRepositoryService()// 與流程定義和部署對象相關的service
.createDeployment()// 建立一個部署對象
.name("流程定義")// 添加部署
.addZipInputStream(zipInputStream)// 指定zip格式的檔案完成部署
.deploy();// 完成部署
System.out.println("部署ID:" + deployment.getId());
System.out.println("部署名稱:" + deployment.getName());
}
}
流程進行中的表的介紹
select * from ACT_RE_DEPLOYMENT; -- 流程部署表
select * from ACT_RE_PROCDEF; -- 流程定義表
---------------------------------------------------
select * from ACT_RU_EXECUTION; --正在執行的執行對象表(沒有每節點時,執行對象id與執行個體id一緻)
select * from ACT_HI_PROCINST; -- 流程執行個體曆史表(流程執行的曆史)
select * from ACT_RU_TASK; -- 正在執行的任務表(隻有usertask 才會顯示)
select * from ACT_HI_TASKINST; -- 任務曆史表(同上)
select * from ACT_HI_ACTINST; -- 所有活動的曆史表(包括開始結束節點)