Activiti 7+Maven+Idea

Activiti 7+Maven+Idea

1. Activiti 7 介绍

Activiti是一个轻量级的工作流和业务流程管理(BPM)平台,面向业务人员,开发人员和系统管理员。它的核心是用于Java的超快速,坚固的BPMN 2流程引擎。它是开源的,并根据Apache许可进行分发。Activiti可以在任何Java应用程序,服务器,集群或云中运行。它与Spring完美集成,非常轻巧,基于简单的概念。

2. Activiti7 核心

2.1 ProcessEngine

提供对所有公开BPM和工作流操作的服务的访问。

2.2 RuntimeService

RuntimeService:允许创建部署,启动和搜索processinstance。

2.3 TaskService

TaskService:公开用于管理人工(独立)任务的操作,例如声明、完成和分配任务
标识服务:用于管理用户、组及其之间的关系。

2.4 ManagementService

ManagementService:公开引擎管理和维护操作

2.5 HistoryService

HistoryService:服务公开关于正在进行的和过去的流程实例的信息。

新建一个普通maven项目

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>Activiti_maven</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <activiti.version>7.0.0.SR1</activiti.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-engine</artifactId>
            <version>${activiti.version}</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.49</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13</version>
            <scope>test</scope>
        </dependency>
        <!--文件读取-->
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.6</version>
        </dependency>
        <!-- log start -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.28</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.12</version>
        </dependency>
        <!-- log end -->

    </dependencies>
    <repositories>
         <repository>
            <id>alfresco</id>
            <name>Activiti Releases</name>
            <url>https://artifacts.alfresco.com/nexus/content/repositories/activiti-releases/</url>
            <releases>
                <enabled>true</enabled>
            </releases>
        </repository>
    </repositories>
</project>

activiti.cfg.xml

添加数据库连接配置,创建activiti数据库

<?xml version="1.0" encoding="UTF-8"?>
<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="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" />

    </bean>
</beans>

制作bpmn流程文件

需要安装Activiti插件
IDEA 插件安装 File->Settings->Plugins 安装新插件actiBPM插件

可能出现查找不到该插件的情况,则可以actiBPM下载通过插件jar文件本地安装

创建bpmn文件,main->resources鼠标右键new->Bpmn File 创建名为test的流程文件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

创建文件并打开界面如下

在这里插入图片描述
下面是我已经创建好的bpmn流程文件
在这里插入图片描述
该流程是一个简单的请假流程

流程开始 StartEvent --> staff(员工填报请假信息)—> Supervisor(主管审批)–(如果大于等于三天)->manager(经理审批)—>personnel(人事入档)----EndeEvent; 由于我的idea的问题,流程线上的条件没有显示出来;
以下是bpmn换成xml格式后的内容

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" xmlns:tns="http://www.activiti.org/test" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" expressionLanguage="http://www.w3.org/1999/XPath" id="m1589779081278" name="" targetNamespace="http://www.activiti.org/test" typeLanguage="http://www.w3.org/2001/XMLSchema">
  <process id="test" isClosed="false" isExecutable="true" processType="None">
    <startEvent id="_2" name="StartEvent"/>
    <endEvent id="_3" name="EndEvent"/>
    <userTask activiti:assignee="${name}" activiti:exclusive="true" id="_4" name="staff"/>
    <sequenceFlow id="_5" sourceRef="_2" targetRef="_4"/>
    <userTask activiti:assignee="${supervisorName}" activiti:exclusive="true" id="_7" name="Supervisor"/>
    <sequenceFlow id="_8" sourceRef="_4" targetRef="_7"/>
    <userTask activiti:assignee="${personnelName}" activiti:exclusive="true" id="_9" name="personnel"/>
    <userTask activiti:assignee="${managerName}" activiti:exclusive="true" id="_12" name="manager"/>
    <sequenceFlow id="_14" sourceRef="_7" targetRef="_12">
      <conditionExpression xsi:type="tFormalExpression">
       <![CDATA[$(num>=3)]]>
      </conditionExpression>
    </sequenceFlow>
    <sequenceFlow id="_16" sourceRef="_7" targetRef="_9">
      <conditionExpression xsi:type="tFormalExpression">
        <![CDATA[$(num<3)]]>
      </conditionExpression>
    </sequenceFlow>
    <sequenceFlow id="_17" sourceRef="_9" targetRef="_3"/>
    <sequenceFlow id="_18" sourceRef="_12" targetRef="_9"/>
  </process>
  <bpmndi:BPMNDiagram documentation="background=#282839;count=1;horizontalcount=1;orientation=0;width=842.4;height=1195.2;imageableWidth=832.4;imageableHeight=1185.2;imageableX=5.0;imageableY=5.0" id="Diagram-_1" name="New Diagram">
    <bpmndi:BPMNPlane bpmnElement="test">
      <bpmndi:BPMNShape bpmnElement="_2" id="Shape-_2">
        <omgdc:Bounds height="32.0" width="32.0" x="365.0" y="125.0"/>
        <bpmndi:BPMNLabel>
          <omgdc:Bounds height="32.0" width="32.0" x="0.0" y="0.0"/>
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="_3" id="Shape-_3">
        <omgdc:Bounds height="32.0" width="32.0" x="120.0" y="640.0"/>
        <bpmndi:BPMNLabel>
          <omgdc:Bounds height="32.0" width="32.0" x="0.0" y="0.0"/>
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="_4" id="Shape-_4">
        <omgdc:Bounds height="55.0" width="85.0" x="345.0" y="210.0"/>
        <bpmndi:BPMNLabel>
          <omgdc:Bounds height="55.0" width="85.0" x="0.0" y="0.0"/>
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="_7" id="Shape-_7">
        <omgdc:Bounds height="55.0" width="85.0" x="350.0" y="315.0"/>
        <bpmndi:BPMNLabel>
          <omgdc:Bounds height="55.0" width="85.0" x="0.0" y="0.0"/>
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="_9" id="Shape-_9">
        <omgdc:Bounds height="55.0" width="85.0" x="100.0" y="445.0"/>
        <bpmndi:BPMNLabel>
          <omgdc:Bounds height="55.0" width="85.0" x="0.0" y="0.0"/>
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="_12" id="Shape-_12">
        <omgdc:Bounds height="55.0" width="85.0" x="345.0" y="450.0"/>
        <bpmndi:BPMNLabel>
          <omgdc:Bounds height="55.0" width="85.0" x="0.0" y="0.0"/>
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNEdge bpmnElement="_14" id="BPMNEdge__14" sourceElement="_7" targetElement="_12">
        <omgdi:waypoint x="390.0" y="370.0"/>
        <omgdi:waypoint x="390.0" y="450.0"/>
        <bpmndi:BPMNLabel>
          <omgdc:Bounds height="0.0" width="0.0" x="0.0" y="0.0"/>
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge bpmnElement="_17" id="BPMNEdge__17" sourceElement="_9" targetElement="_3">
        <omgdi:waypoint x="136.0" y="500.0"/>
        <omgdi:waypoint x="136.0" y="640.0"/>
        <bpmndi:BPMNLabel>
          <omgdc:Bounds height="0.0" width="0.0" x="0.0" y="0.0"/>
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge bpmnElement="_16" id="BPMNEdge__16" sourceElement="_7" targetElement="_9">
        <omgdi:waypoint x="350.0" y="342.5"/>
        <omgdi:waypoint x="185.0" y="472.5"/>
        <bpmndi:BPMNLabel>
          <omgdc:Bounds height="0.0" width="0.0" x="0.0" y="0.0"/>
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge bpmnElement="_18" id="BPMNEdge__18" sourceElement="_12" targetElement="_9">
        <omgdi:waypoint x="345.0" y="477.5"/>
        <omgdi:waypoint x="185.0" y="472.5"/>
        <bpmndi:BPMNLabel>
          <omgdc:Bounds height="0.0" width="0.0" x="0.0" y="0.0"/>
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge bpmnElement="_5" id="BPMNEdge__5" sourceElement="_2" targetElement="_4">
        <omgdi:waypoint x="381.0" y="157.0"/>
        <omgdi:waypoint x="381.0" y="210.0"/>
        <bpmndi:BPMNLabel>
          <omgdc:Bounds height="0.0" width="0.0" x="0.0" y="0.0"/>
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge bpmnElement="_8" id="BPMNEdge__8" sourceElement="_4" targetElement="_7">
        <omgdi:waypoint x="390.0" y="265.0"/>
        <omgdi:waypoint x="390.0" y="315.0"/>
        <bpmndi:BPMNLabel>
          <omgdc:Bounds height="0.0" width="0.0" x="0.0" y="0.0"/>
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNEdge>
    </bpmndi:BPMNPlane>
  </bpmndi:BPMNDiagram>
</definitions>

流程的Key值,后面可以通过key值找到指定流程
流程的Key值,后面可以通过key值找到指定流程节点名称staff,Assignee 使用${name} 可在实例化流程时指定员工
在这里插入图片描述剩下的节点同理,
name:Supervisor Assignee: ${supervisorName}
name: personnel Assignee: ${personnelName}
name: manager Assignee: ${managerName}
在这里插入图片描述
指定执行条件
以下是运行demo

package com.jm;

import org.activiti.engine.*;
import org.activiti.engine.repository.Deployment;
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 java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;


public class application {
    public static void main(String[] args) {
        //流程引擎的抽象,可以通过此类获取需要的所有服务。
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        Model.setProcessEngine(processEngine);
        System.out.println("ProcessEngine:" + processEngine.getName() + "\nversion:" + ProcessEngine.VERSION);
        System.out.println("========================流程引擎的抽象,可以通过此类获取需要的所有服务==================================");
        //获取流程仓库service
        RepositoryService repositoryService = processEngine.getRepositoryService();

        //添加部署流程
        Deployment deploy = repositoryService.createDeployment()
                .addClasspathResource("test.bpmn")
                .name("请假流程")
                .deploy();
        //创建查询

        ProcessDefinitionQuery definitionQuery = repositoryService.createProcessDefinitionQuery();

        //查询全部流程
        List<ProcessDefinition> processDefinitionList = definitionQuery.list();

        for (ProcessDefinition p : processDefinitionList) {
            System.out.println("流程名称" + p.getName() + "" +
                    "\n Id:" + p.getId() +
                    "\n 流程文件:" + p.getResourceName()+
                    "\n 流程版本:"+p.getVersion());
        }
        System.out.println("==========================查询全部流程================================");
        //查询指定流程
        ProcessDefinition processDefinition = definitionQuery.deploymentId(deploy.getId()).singleResult();
        System.out.println("流程名称" + processDefinition.getName() + "" +
                "\n Id:" + processDefinition.getId() +
                "\n 流程文件:" + processDefinition.getResourceName()+
                "\n 流程版本:"+processDefinition.getVersion());
        System.out.println("==========================查询指定流程================================");
        ProcessDefinition definition = definitionQuery
                .orderByProcessDefinitionVersion()
                .desc().singleResult();
        System.out.println("流程名称" + definition.getName() + "" +
                "\n Id:" + definition.getId() +
                "\n 流程文件:" + definition.getResourceName()+
                "\n 流程版本:"+definition.getVersion());
        System.out.println("===========================获取最新版本流程===============================");
        boolean isContinue=true;
        Scanner scanner=new Scanner(System.in);
        String key="test";
        while(isContinue){
            System.out.println("开始请假流程:");
            //获取runtimeServer
            RuntimeService runtimeService = processEngine.getRuntimeService();
            //请假流程kye   test
            Map<String,Object> map=new HashMap<String, Object>();
            System.out.println("请假人姓名:");
            String staffName = scanner.next();
            map.put("name",staffName);
            System.out.println("主管姓名:");
            String supervisorName = scanner.next();
            map.put("supervisorName",supervisorName);
            System.out.println("经理姓名:");
            String managerName = scanner.next();
            map.put("managerName",managerName);
            System.out.println("人事姓名:");
            String personnelName = scanner.next();
            map.put("personnelName",personnelName);
            System.out.println("请输入请假天数:");
            float num = scanner.nextFloat();
            map.put("num",num);
            ProcessInstance activiti_test = runtimeService.startProcessInstanceByKey(key, map);
            System.out.println("已提交"+deploy.getName()+"[id:"+activiti_test.getProcessDefinitionId()+"]");
            //获取taskServer
            TaskService taskService = processEngine.getTaskService();
            TaskQuery taskQuery = taskService.createTaskQuery().processDefinitionKey(key);
            Task staffTask = taskQuery.taskAssignee(staffName).singleResult();
            if (staffTask!=null){
                System.out.println("员工["+staffTask.getAssignee()+"]填写完整信息");
                taskService.complete(staffTask.getId());
                System.out.println("员工["+staffTask.getAssignee()+"]填写完整信息--完成");
            }
            Task supervisorTask = taskQuery.taskAssignee(supervisorName).singleResult();
            if (supervisorTask!=null){
                System.out.println("主管["+supervisorTask.getAssignee()+"]开始审批假条");
                taskService.complete(supervisorTask.getId());
                System.out.println("主管["+supervisorTask.getAssignee()+"]已完成审批");
            }
            Task managerTask=taskQuery.taskAssignee(managerName).singleResult();
            if (managerTask!=null){
                System.out.println("经理["+managerTask.getAssignee()+"]开始审批假条");
                taskService.complete(managerTask.getId());
                System.out.println("经理["+managerTask.getAssignee()+"]已完成审批");
            }
            Task personnelTask = taskQuery.taskAssignee(personnelName).singleResult();
            if (personnelTask!=null){
                System.out.println("人事["+personnelTask.getAssignee()+"]记录入档");
                taskService.complete(personnelTask.getId());
                System.out.println("人事["+personnelTask.getAssignee()+"]完成记录入档");
            }
            System.out.println("是否还需提交请假申请:true:false");
            isContinue=  scanner.nextBoolean();
        }
    }
}

运行结果

"C:\Program Files\Java\jdk1.8.0_144\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2019.3.3\lib\idea_rt.jar=5873:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2019.3.3\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_144\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\rt.jar;E:\Platform_Deploy\Client\综保区项目\Activiti_maven\target\classes;C:\Users\jm\.m2\repository\org\activiti\activiti-engine\7.0.0.SR1\activiti-engine-7.0.0.SR1.jar;C:\Users\jm\.m2\repository\org\activiti\api\activiti-api-runtime-shared\7.0.0.SR1\activiti-api-runtime-shared-7.0.0.SR1.jar;C:\Users\jm\.m2\repository\org\activiti\api\activiti-api-model-shared\7.0.0.SR1\activiti-api-model-shared-7.0.0.SR1.jar;C:\Users\jm\.m2\repository\org\activiti\activiti-bpmn-converter\7.0.0.SR1\activiti-bpmn-converter-7.0.0.SR1.jar;C:\Users\jm\.m2\repository\org\activiti\activiti-bpmn-model\7.0.0.SR1\activiti-bpmn-model-7.0.0.SR1.jar;C:\Users\jm\.m2\repository\org\activiti\activiti-process-validation\7.0.0.SR1\activiti-process-validation-7.0.0.SR1.jar;C:\Users\jm\.m2\repository\org\apache\commons\commons-email\1.5\commons-email-1.5.jar;C:\Users\jm\.m2\repository\com\sun\mail\javax.mail\1.5.6\javax.mail-1.5.6.jar;C:\Users\jm\.m2\repository\javax\activation\activation\1.1\activation-1.1.jar;C:\Users\jm\.m2\repository\org\apache\commons\commons-lang3\3.8.1\commons-lang3-3.8.1.jar;C:\Users\jm\.m2\repository\org\mybatis\mybatis\3.4.2\mybatis-3.4.2.jar;C:\Users\jm\.m2\repository\org\springframework\spring-beans\5.1.4.RELEASE\spring-beans-5.1.4.RELEASE.jar;C:\Users\jm\.m2\repository\org\springframework\spring-core\5.1.4.RELEASE\spring-core-5.1.4.RELEASE.jar;C:\Users\jm\.m2\repository\org\springframework\spring-jcl\5.1.4.RELEASE\spring-jcl-5.1.4.RELEASE.jar;C:\Users\jm\.m2\repository\de\odysseus\juel\juel-api\2.2.7\juel-api-2.2.7.jar;C:\Users\jm\.m2\repository\de\odysseus\juel\juel-impl\2.2.7\juel-impl-2.2.7.jar;C:\Users\jm\.m2\repository\de\odysseus\juel\juel-spi\2.2.7\juel-spi-2.2.7.jar;C:\Users\jm\.m2\repository\com\fasterxml\jackson\core\jackson-core\2.9.8\jackson-core-2.9.8.jar;C:\Users\jm\.m2\repository\com\fasterxml\jackson\core\jackson-annotations\2.9.0\jackson-annotations-2.9.0.jar;C:\Users\jm\.m2\repository\com\fasterxml\jackson\core\jackson-databind\2.9.8\jackson-databind-2.9.8.jar;C:\Users\jm\.m2\repository\joda-time\joda-time\2.10.1\joda-time-2.10.1.jar;C:\Users\jm\.m2\repository\org\slf4j\jcl-over-slf4j\1.7.25\jcl-over-slf4j-1.7.25.jar;C:\Users\jm\.m2\repository\mysql\mysql-connector-java\5.1.49\mysql-connector-java-5.1.49.jar;C:\Users\jm\.m2\repository\commons-io\commons-io\2.6\commons-io-2.6.jar;C:\Users\jm\.m2\repository\log4j\log4j\1.2.17\log4j-1.2.17.jar;C:\Users\jm\.m2\repository\org\slf4j\slf4j-api\1.7.28\slf4j-api-1.7.28.jar;C:\Users\jm\.m2\repository\org\slf4j\slf4j-log4j12\1.7.12\slf4j-log4j12-1.7.12.jar" com.jm.application
log4j:WARN No appenders could be found for logger (org.activiti.engine.ProcessEngines).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
Tue May 19 10:28:28 CST 2020 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
ProcessEngine:default
version:7.0.0.0
========================流程引擎的抽象,可以通过此类获取需要的所有服务==================================
流程名称null
 Id:test:1:3
 流程文件:test.bpmn
 流程版本:1
==========================查询全部流程================================
流程名称null
 Id:test:1:3
 流程文件:test.bpmn
 流程版本:1
==========================查询指定流程================================
流程名称null
 Id:test:1:3
 流程文件:test.bpmn
 流程版本:1
===========================获取最新版本流程===============================
开始请假流程:
请假人姓名:
严
主管姓名:
杨
经理姓名:
李
人事姓名:
唐
请输入请假天数:
6
已提交请假流程[id:test:1:3]
员工[]填写完整信息
员工[]填写完整信息--完成
主管[]开始审批假条
主管[]已完成审批
经理[]开始审批假条
经理[]已完成审批
人事[]记录入档
人事[]完成记录入档
是否还需提交请假申请:true:false
true
开始请假流程:
请假人姓名:
小明
主管姓名:
杨主管
经理姓名:
卞经理
人事姓名:
李人事
请输入请假天数:
2
已提交请假流程[id:test:1:3]
员工[小明]填写完整信息
员工[小明]填写完整信息--完成
主管[杨主管]开始审批假条
主管[杨主管]已完成审批
人事[李人事]记录入档
人事[李人事]完成记录入档
是否还需提交请假申请:true:false

根据不同的请假天数会走不同的流程,至此一个简单的Activiti7 的流程demo已经完成了;

数据库

在这里插入图片描述
activiti数据库表一共有25张,负责支持流程实现和运行
具体的表结构书名可以去官网过着其他地方搜索查看一下,这里就不做详细的说明了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值