本次示例使用的IDER測試完成java
測試背景 : xx餓了去飯店吃飯 須要先和服務員點餐 點完餐後服務員將菜品傳遞給廚師製做 製做完成後吃飽mysql
建立上一篇測試成功出現的BpmnFilespring
測試環境不須要那麼複雜,暫且先用到這幾個控件 其餘的在此不作演示 能夠本身進行測試sql
1:開始畫流程圖數據庫
1.StartEvent 開始按鈕(代表如今餓了要去吃飯)
2.UserTask 任務按鈕(首先應該先到飯店進行點餐)
3.UserTask 任務按鈕(服務員點完餐後要將菜品傳遞給廚師)
4.UserTask 任務按鈕(廚師得到菜品後製做菜品)
5.EndEvent 結束按鈕(上菜 吃飽了)ide
2:按鈕配置詳情 測試
將按鈕參數賦值(我這裏只測試了 Id 和 Name 這裏若是填寫的話 以後生成的數據庫數據就不是null了)gradle
3:流程按鈕配置完成後用鏈接線鏈接(這裏我沒有給線起名字 後面也不妨礙)ui
4:將建立的eat.bpmn生成一個png格式的圖片,上一篇也說了 IDEA與Eclipse有一點不同。 IDEA中須要手動進行生成。spa
5:將bpmn後綴改成xml格式(這裏有可能出現亂碼狀況)
解決亂碼
5.1:首先打開ider安裝目錄的bin文件夾下的這兩個文件
5.2:添加這句代碼 -Dfile.encoding=UTF-8
保存內容,而後重啓IDEA,就會發現不會亂碼了。效果如圖:
6:右鍵xml文件 選擇Diagrams ---- Show BPMN 2.0 Designer...
7:點擊上方Export to File
保存到對應的工程下面便可。就會看到有個eat.png的圖片出現
其實改不改回來格式都同樣,除非你再去修改流程圖
下面到了代碼階段(碰了好多壁,直接粘測試好的內容吧)
8:添加依賴(這裏引用的是gradle的)
compile group: 'mysql', name: 'mysql-connector-java', version: '5.1.40'
compile group: 'org.activiti', name: 'activiti-engine', version: '5.22.0'
compile group: 'org.activiti', name: 'activiti-spring', version: '5.22.0'
compile group: 'org.activiti', name: 'activiti-bpmn-model', version: '5.22.0'
9:在src目錄下建立一個activiti.cfg.xml文件,這個主要是用於存放後面acitivi部署流程中,建立的相關聯的一些表。
<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="jdbcDriver" value="com.mysql.jdbc.Driver"></property> <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/activiti?useUnicode=true&characterEncoding=utf8"></property> <property name="jdbcUsername" value="root"></property> <property name="jdbcPassword" value="root"></property> <property name="databaseSchemaUpdate" value="true"></property> </bean> </beans>
10:建立一個數據庫生成的測試。(注意:要保證本地有對應名字的數據庫)
/** * 建立一個數據庫生成的測試類.(注意:要保證本地有對應名字的數據庫) */ public class ActivitiTable { /** * 建立Activiti流的相關的數據庫表 */ @Test public void creatTable(){ ProcessEngine processEngine = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml") .buildProcessEngine(); } }
若是,運行測試方法成功以後,再進入數據庫,咱們會看到產生了以下多張數據表(看別人的都是23張 個人出來25張 最以前jar包引的太亂出現表還不正確也是煩的一批)
表的詳解就不在這說了網上都有的就不作分析了
11:進行流程部署的重點開發(按照下面的流程步驟11進行)------------畫重點考試要考的
import org.activiti.engine.ProcessEngine; import org.activiti.engine.ProcessEngines; import org.activiti.engine.task.Task; import org.junit.Test; import java.util.List; /** * 用於進行演示Activiti的首例程序,即描述如何在代碼中實現學生進行請假申請,班主任審覈,教務處審覈 **/ public class ActivitiTest { /** * 一、部署流程 * 二、啓動流程實例 * 三、餓了的人發出點餐申請 * 四、服務員查看任務 * 五、服務員點餐 * 六、廚師作飯 */ /** * 1:部署一個Activiti流程 * 運行成功後,查看以前的數據庫表,就會發現多了不少內容 */ @Test public void creatActivitiTask(){ //加載的那兩個內容就是咱們以前已經弄好的基礎內容哦。 //獲得了流程引擎 ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); processEngine.getRepositoryService() .createDeployment() .addClasspathResource("eat.xml") .addClasspathResource("eat.png") .deploy(); } /** * 2:啓動流程實例 */ @Test public void testStartProcessInstance(){ ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); processEngine.getRuntimeService() .startProcessInstanceById("myProcess_1:1:4"); //這個是查看數據庫中act_re_procdef表ID值 } /** * 完成點餐申請 */ @Test public void testOrder(){ ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); processEngine.getTaskService() .complete("2504"); //查看act_ru_task表ID } /** * 餓了 服務員小張查詢當前正在執行任務 */ @Test public void testQueryTask(){ //下面代碼中的小張,就是咱們以前設計那個流程圖中添加的服務員內容 ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); List<Task> tasks = processEngine.getTaskService() .createTaskQuery() .taskAssignee("小張") .list(); for (Task task : tasks) { System.out.println(task.getName()); } } /** * 服務員小張完成任務 */ @Test public void testFinishTask_manager(){ ProcessEngine engine = ProcessEngines.getDefaultProcessEngine(); engine.getTaskService() .complete("5002"); //查看act_ru_task數據表ID } /** * 廚師老李完成的任務 */ @Test public void testFinishTask_Boss(){ ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); processEngine.getTaskService() .complete("7502"); //查看act_ru_task數據表ID } }
一個一個Test方法來注意表的變化(字段有的太多了就不放兩張圖了,測試的時候本身注意下)
下面就放圖看一下數據變化吧!
多圖警告!後方高能!!!
第一步
獲取流程引擎:注意這幾張表的數據變化
bytearray表
deployment表
procdef表
第二步
啓動流程示例,注意這幾張表的變化
actinst表
procinst表
taskinst表
execution表
task表
第三步
actinst表
taskinst表
identitylink表
execution表
identitylink表
task表
第四步
第五步
actinst表
identitylink表
taskinst表
execution表
identitylink表
task表
第六步
actinst表
taskinst表
execution表
identitylink表
task表
一個個@Test測試過來,看出其中的規律了嗎,本身嘗試測試看一下吧!
最後附上測試代碼 僅供參考:提取碼: n7cj