工做流(Workflow),就是「業務過程的部分或總體在計算機應用環境下的自動化」,它主要解決的是「使在多個參與者之間按照某種預約義的規則傳遞文檔、信息或任務的過程自動進行,從而實現某個預期的業務目標,或者促使此目標的實現」。java
工做流管理系統(Workflow Management System, WfMS)是一個軟件系統,它完成工做量的定義和管理,並按照在系統中預先定義好的工做流邏輯進行工做流實例的執行。工做流管理系統不是企業的業務系統,而是爲企業的業務系統的運行提供了一個軟件的支撐環境。mysql
Activiti5是由Alfresco軟件在2010年5月17日發佈的業務流程管理(BPM)框架,它是覆蓋了業務流程管理、工做流、服務協做等領域的一個開源的、靈活的、易擴展的可執行流程語言框架。Activiti基於Apache許可的開源BPM平臺,創始人Tom Baeyens是JBoss jBPM的項目架構師,它特點是提供了eclipse插件,開發人員能夠經過插件直接繪畫出業務流程圖。sql
Activiti框架底層有數據庫提供支持,根據版本不一樣,表的數量不一致,activiti5.13有23張表。底層使用mybatis操做數據庫,開發人員不須要本身編寫sql數據庫
Jbpm4.4底層也有數據庫支持,18張表。 底層使用hibernate操做數據庫。mybatis
Activiti的後臺是有數據庫的支持,全部的表都以ACT_開頭。 第二部分是表示表的用途的兩個字母標識。 用途也和服務的API對應。架構
1) ACT_RE_*: 'RE'表示repository。 這個前綴的表包含了流程定義和流程靜態資源 (圖片,規則,等等)。框架
2) ACT_RU_*: 'RU'表示runtime。 這些運行時的表,包含流程實例,任務,變量,異步任務,等運行中的數據。 Activiti只在流程實例執行過程當中保存這些數據, 在流程結束時就會刪除這些記錄。 這樣運行時表能夠一直很小速度很快。eclipse
3) ACT_ID_*: 'ID'表示identity。 這些表包含身份信息,好比用戶,組等等。異步
4) ACT_HI_*: 'HI'表示history。 這些表包含歷史數據,好比歷史流程實例, 變量,任務等等。ide
5) ACT_GE_*: 通用數據, 用於不一樣場景下。
第一步:解壓zip文件到eclipse中的dropins目錄中
第二步:重啓eclipse,勾選save選項
第三步:使用插件設計流程圖
package activity.demo.test; import java.util.List; import org.activiti.engine.ProcessEngine; import org.activiti.engine.ProcessEngineConfiguration; import org.activiti.engine.ProcessEngines; import org.activiti.engine.impl.juel.ExpressionFactoryImpl.Profile; import org.activiti.engine.repository.Deployment; import org.activiti.engine.repository.DeploymentBuilder; import org.activiti.engine.repository.ProcessDefinition; import org.activiti.engine.repository.ProcessDefinitionQuery; import org.activiti.engine.runtime.ProcessInstance; import org.activiti.engine.task.Task; import org.activiti.engine.task.TaskQuery; import org.junit.Test; import org.junit.validator.PublicClassValidator; public class HelloWorld { // 使用框架的自動建表功能(不提供配置文件) @Test public void testCreateTablesAutomaticallyWithoutConfigFiles() { // 建立流程引擎配置對象 ProcessEngineConfiguration config = ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration(); // 設置jdbc鏈接參數信息 config.setJdbcDriver("com.mysql.jdbc.Driver"); config.setJdbcUrl("jdbc:mysql:///eam-mirror"); config.setJdbcUsername("root"); config.setJdbcPassword("root"); // 設置自動建表 config.setDatabaseSchemaUpdate("true"); // 使用配置對象建立流程引擎對象,建立對象過程當中會自動建表 ProcessEngine processEngine = config.buildProcessEngine(); } // 使用框架的自動建表功能(提供配置文件) @Test public void testCreateTablesAutomaticallyWithConfigFiles() { ProcessEngineConfiguration config = ProcessEngineConfiguration .createProcessEngineConfigurationFromResource("activiti-context.xml", "processEngineConfiguration"); ProcessEngine pe = config.buildProcessEngine(); } // 使用框架的自動建表功能(提供配置文件---使用默認配置) @Test public void testCreateTablesAutomatically() { ProcessEngine pe = ProcessEngines.getDefaultProcessEngine(); } ProcessEngine pe = ProcessEngines.getDefaultProcessEngine(); // 將設計的流程圖部署到數據庫中 @Test public void testDeploy() { // 建立部署構建器對象,用於加載流程定義文件(UserInfoAudit.bpmn,UserInfoAudit.myProcess.png),部署流程定義 DeploymentBuilder deploymentBuilder = pe.getRepositoryService().createDeployment(); deploymentBuilder.addClasspathResource("UserInfoAudit.bpmn"); Deployment deployment = deploymentBuilder.deploy(); System.out.println(deployment.getId()); } // 查詢流程定義 @Test public void testQueryProcessDefinition() { // 流程定義查詢對象,用於查詢流程定義表----act_re_procdef ProcessDefinitionQuery query = pe.getRepositoryService().createProcessDefinitionQuery(); // 添加過濾條件,取最新版本 query.latestVersion(); // query.processDefinitionId(processDefinitionId) // query.processDefinitionKey(processDefinitionKey); // 添加排序條件 query.orderByProcessDefinitionVersion().desc(); // 添加分頁條件 // query.listPage(firstResult, maxResults); // 查詢全部流程 List<ProcessDefinition> processDefinitionList = query.list(); for (ProcessDefinition pd : processDefinitionList) { System.out.println(pd.getId()); } } // 根據流程定義啓動流程實例----操做的數據表:act_ru_execution act_ru_task @Test public void testStartProcess(){ String processDefinitionId = "UserAuditProcess:2:504"; //根據流程實例ID去啓動流程 ProcessInstance pInstance = pe.getRuntimeService().startProcessInstanceById(processDefinitionId); System.out.println(pInstance.getId()); } //查詢任務列表 @Test public void testQueryTaskList(){ //建立任務查詢對象,查詢表act_ru_task TaskQuery query = pe.getTaskService().createTaskQuery(); String assignee ="張三"; //添加過濾條件 query.taskAssignee(assignee); //排序 query.orderByTaskCreateTime().desc(); List<Task> taskList = query.list(); for(Task task : taskList){ System.out.println("taskId:"+task.getId()+",taskName:"+task.getName()); } } //辦理任務 //辦理我的任務,操做的表是act_ru_execution,act_ru_task @Test public void testExecuteTask(){ String taskId= "604"; pe.getTaskService().complete(taskId); } }