一、搭建項目架構
- 使用idea需要安裝actiBPM插件用來畫流程圖
- 創建一個空的java項目,並添加文件夾如下:
lib:存放需要使用的jar包,可從下面鏈接直接下載解壓,記得加入將包加入項目中,如下:
jar包提取碼:c0zq
resource:存放資源文件,比如bpmn流程文件等 - 新建一個流程first.bpmn
- 添加log4j.properties文件,配置日誌
log4j.rootLogger=INFO, stdout # Console Appender log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern= %d{hh:mm:ss,SSS} [%t] %-5p %c %x - %m%n # Custom tweaks log4j.logger.com.codahale.metrics=WARN log4j.logger.com.ryantenney=WARN log4j.logger.com.zaxxer=WARN log4j.logger.org.apache=WARN log4j.logger.org.hibernate=WARN log4j.logger.org.hibernate.engine.internal=WARN log4j.logger.org.hibernate.validator=WARN log4j.logger.org.springframework=WARN log4j.logger.org.springframework.web=WARN log4j.logger.org.springframework.security=WARN
- 引入activiti的配置文件activiti.cfg.xml
可從官網複製:activiti.cfg.xml
修改如下:<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"> <!--如果mysql是8.0,需要自己引用對應的mysql-connector-java-8.0.16.jar,並在連接上加上時區如下--> <!--<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/activiti?serverTimezone=UTC" />--> <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/activiti?characterEncoding=utf-8&useUnicode=true&useSSL=true" /> <property name="jdbcDriver" value="com.mysql.jdbc.Driver" /> <property name="jdbcUsername" value="root" /> <property name="jdbcPassword" value="123456" /> <property name="databaseSchemaUpdate" value="true" /> <!--以下注釋掉--> <!-- <property name="asyncExecutorActivate" value="false" />--> <!-- <property name="mailServerHost" value="mail.my-corp.com" />--> <!-- <property name="mailServerPort" value="5025" />--> </bean> </beans>
- 創建對應的數據庫
二、解決IDEA中Activiti的中文亂碼
- 進入idea的安裝目錄
- 打開這兩個文件,在最後面添加一行
-Dfile.encoding=UTF-8
- 重啓IDEA即可。
三、編碼
- 在src對應目錄下創建類:ActivitiTest,編碼如下
package com.xjf.c3; /*注意導入activiti6.0的包*/ import org.activiti.engine.*; import org.activiti.engine.runtime.ProcessInstance; import org.activiti.engine.task.Task; /** * @Auther: XuJiaFei * @Date: 2019/11/8 09:49 * @Description: */ public class ActivitiTest { public static void main(String[] args) { //獲取流程引擎 ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); //存儲服務 RepositoryService repositoryService = processEngine.getRepositoryService(); //運行服務 RuntimeService runtimeService = processEngine.getRuntimeService(); //任務服務 TaskService taskService = processEngine.getTaskService(); //發佈流程 repositoryService.createDeployment().addClasspathResource("first.bpmn").deploy(); //創建一個請假流程,獲取流程實例。此處的流程id爲first.bpmn的process的id ProcessInstance pi = runtimeService.startProcessInstanceByKey("myProcess_1"); //員工完成請假的任務 Task task = taskService.createTaskQuery().processInstanceId(pi.getId()).singleResult(); System.out.println("當前流程節點:" + task.getName()); taskService.complete(task.getId()); //經理完成審批任務 task = taskService.createTaskQuery().processInstanceId(pi.getId()).singleResult(); System.out.println("當前流程節點:" + task.getName()); taskService.complete(task.getId()); //流程執行完了,再去獲取任務會爲null task = taskService.createTaskQuery().processInstanceId(pi.getId()).singleResult(); System.out.println("流程執行結束了:" + task); //關閉引擎 processEngine.close(); //退出 System.exit(0); } }
注意:
-
runtimeService.startProcessInstanceByKey(“myProcess_1”)對應的key,是first.bpmn中的,在idea中將first.bpmn重命名爲first.xml,能看到對應的xml
千萬注意將process後面的 xmlns=" " 去掉,不然會啓動失敗 -
運行後數據庫會生成28張表
四、結果
該流程模擬實現了員工進行請假,然後經理進行審批的流程。