第一節:實現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
    
  5. 引入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&amp;useUnicode=true&amp;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>
    
  6. 創建對應的數據庫
    數據庫

二、解決IDEA中Activiti的中文亂碼

  1. 進入idea的安裝目錄
    在這裏插入圖片描述
  2. 打開這兩個文件,在最後面添加一行
    -Dfile.encoding=UTF-8
    
  3. 重啓IDEA即可。

三、編碼

  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張表

四、結果

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章