1. 程式人生 > 程式設計 >第一節:實現Activiti6.0的第一個demo

第一節:實現Activiti6.0的第一個demo

一、搭建專案架構

  1. 使用idea需要安裝actiBPM外掛用來畫流程圖
  2. 建立一個空的java專案,並新增資料夾如下:
    專案包
    lib:存放需要使用的jar包,可從下面連結直接下載解壓,記得加入將包加入專案中,如下: jar包提取碼:c0zq
    在這裡插入圖片描述
    resource:存放資原始檔,比如bpmn流程檔案等
  3. 新建一個流程first.bpmn
    流程
  4. 新增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 複製程式碼
  1. 引入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" /> <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> 複製程式碼
  1. 建立對應的資料庫
    資料庫

二、編碼

  1. 在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);

    }
}

複製程式碼

注意

  1. runtimeService.startProcessInstanceByKey("myProcess_1")對應的key,是first.bpmn中的,在idea中將first.bpmn重新命名為first.xml,能看到對應的xml

    first.xml
    千萬注意將process後面的 xmlns=" " 去掉,不然會啟動失敗

  2. 執行後資料庫會生成28張表

    28張表

三、結果

結果
該流程模擬實現了員工進行請假,然後經理進行審批的流程。