Activiti学习(一)之工作流的介绍和使用

什么是工作流

1. 工作流介绍
工作流(Workflow),就是通过计算机对业务流程自动化执行管理。它主要解决的是“使在多个参与者之间按照某种预定义的规则自动进行传递文档、信息或任务的过程,从而实现某个预期的业务目标,或者促使此目标的实现”。

2. 工作流系统
一个软件系统中具有工作流的功能,我们把它称为工作流系统,一个系统中工作流的功能是什么?就是对系统的业务流程进行自动化管理,所以工作流是建立在业务流程的基础上,所以一个软件的系统核心根本上还是系统的业务流程,工作流只是协助进行业务流程管理。即使没有工作流业务系统也可以开发运行,只不过有了工作流可以更好的管理业务流程,提高系统的可扩展性。

⑴ 适用行业
消费品行业,制造业,电信服务业,银证险等金融服务业,物流服务业,物业服务业,物业管理,大中型进出口贸易公司,政府事业机构,研究院所及教育服务业等,特别是大的跨国企业和集团公司。

⑵ 具体应用
关键业务流程:订单、报价处理、合同审核、客户电话处理、供应链管理等
行政管理类:出差申请、加班申请、请假申请、用车申请、各种办公用品申请、购买申请、日报周报等凡是原来手工流转处理的行政表单。
人事管理类:员工培训安排、绩效考评、职位变动处理、员工档案信息管理等。
财务相关类:付款请求、应收款处理、日常报销处理、出差报销、预算和计划申请等。
客户服务类:客户信息管理、客户投诉、请求处理、售后服务管理等。
特殊服务类:ISO 系列对应流程、质量管理对应流程、产品数据信息管理、贸易公司报关处理、
物流公司货物跟踪处理等各种通过表单逐步手工流转完成的任务均可应用工作流软件自动规范
地实施。
3. 工作流实现方式
在没有专门的工作流引擎之前,我们之前为了实现流程控制,通常的做法就是采用状态字段的值来跟踪流程的变化情况。这样不用角色的用户,通过状态字段的取值来决定记录是否显示。
针对有权限可以查看的记录,当前用户根据自己的角色来决定审批是否合格的操作。如果合格将状态字段设置一个值,来代表合格;当然如果不合格也需要设置一个值来代表不合格的情况。
这是一种最为原始的方式。通过状态字段虽然做到了流程控制,但是当我们的流程发生变更的时候,这种方式所编写的代码也要进行调整。
那么有没有专业的方式来实现工作流的管理呢?并且可以做到业务流程变化之后,我们的程序可以不用改变,如果可以实现这样的效果,那么我们的业务系统的适应能力就得到了极大提升。

Activity7概述

介绍

Alfresco软件在2010年5月17日宣布Activiti业务流程管理(BPM)开源项目的正式启动,其首席架构师由业务流程管理BPM的专家 Tom Baeyens担任,Tom Baeyens就是原来jbpm的架构师,而jbpm是一个非常有名的工作流引擎,当然activiti也是一个工作流引擎。

  Activiti是一个工作流引擎, activiti可以将业务系统中复杂的业务流程抽取出来,使用专门的建模语言BPMN2.0进行定义,业务流程按照预先定义的流程进行执行,实现了系统的流程由activiti进行管理,减少业务系统由于流程变更进行系统升级改造的工作量,从而提高系统的健壮性,同时也减少了系统开发维护成本。

​ 官方网站:https://www.activiti.org/

BPM

  BPM(Business Process Management),即业务流程管理,是一种规范化的构造端到端的业务流程,以持续的提高组织业务效率。常见商业管理教育如EMBA、MBA等均将BPM包含在内。

BPM软件

  BPM软件就是根据企业中业务环境的变化,推进人与人之间、人与系统之间以及系统与系统之间的整合及调整的经营方法与解决方案的IT工具。

  通过BPM软件对企业内部及外部的业务流程的整个生命周期进行建模、自动化、管理监控和优化,使企业成本降低,利润得以大幅提升。

  BPM软件在企业中应用领域广泛,凡是有业务流程的地方都可以BPM软件进行管理,比如企业人事办公管理、采购流程管理、公文审批流程管理、财务管理等。

BPMN

  BPMN(Business Process Model AndNotation)- 业务流程模型和符号 是由BPMI(BusinessProcess Management Initiative)开发的一套标准的业务流程建模符号,使用BPMN提供的符号可以创建业务流程。

  2004年5月发布了BPMN1.0规范.BPMI于2005年9月并入OMG(The Object Management Group对象管理组织)组织。OMG于2011年1月发布BPMN2.0的最终版本。

具体发展历史如下:

  BPMN 是目前被各 BPM 厂商广泛接受的 BPM 标准。Activiti 就是使用 BPMN 2.0 进行流程建模、流程执行管理,它包括很多的建模符号,比如:

Event

用一个圆圈表示,它是流程中运行过程中发生的事情。


活动用圆角矩形表示,一个流程由一个活动或多个活动组成

Bpmn图形其实是通过xml表示业务流程,上边的.bpmn文件使用文本编辑器打开:

<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" 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" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/test">
  <process id="myProcess" name="My process" isExecutable="true">
    <startEvent id="startevent1" name="Start"></startEvent>
    <userTask id="usertask1" name="创建请假单"></userTask>
    <sequenceFlow id="flow1" sourceRef="startevent1" targetRef="usertask1"></sequenceFlow>
    <userTask id="usertask2" name="部门经理审核"></userTask>
    <sequenceFlow id="flow2" sourceRef="usertask1" targetRef="usertask2"></sequenceFlow>
    <userTask id="usertask3" name="人事复核"></userTask>
    <sequenceFlow id="flow3" sourceRef="usertask2" targetRef="usertask3"></sequenceFlow>
    <endEvent id="endevent1" name="End"></endEvent>
    <sequenceFlow id="flow4" sourceRef="usertask3" targetRef="endevent1"></sequenceFlow>
  </process>
  <bpmndi:BPMNDiagram id="BPMNDiagram_myProcess">
    <bpmndi:BPMNPlane bpmnElement="myProcess" id="BPMNPlane_myProcess">
      <bpmndi:BPMNShape bpmnElement="startevent1" id="BPMNShape_startevent1">
        <omgdc:Bounds height="35.0" width="35.0" x="130.0" y="160.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="usertask1" id="BPMNShape_usertask1">
        <omgdc:Bounds height="55.0" width="105.0" x="210.0" y="150.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="usertask2" id="BPMNShape_usertask2">
        <omgdc:Bounds height="55.0" width="105.0" x="360.0" y="150.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="usertask3" id="BPMNShape_usertask3">
        <omgdc:Bounds height="55.0" width="105.0" x="510.0" y="150.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="endevent1" id="BPMNShape_endevent1">
        <omgdc:Bounds height="35.0" width="35.0" x="660.0" y="160.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNEdge bpmnElement="flow1" id="BPMNEdge_flow1">
        <omgdi:waypoint x="165.0" y="177.0"></omgdi:waypoint>
        <omgdi:waypoint x="210.0" y="177.0"></omgdi:waypoint>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge bpmnElement="flow2" id="BPMNEdge_flow2">
        <omgdi:waypoint x="315.0" y="177.0"></omgdi:waypoint>
        <omgdi:waypoint x="360.0" y="177.0"></omgdi:waypoint>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge bpmnElement="flow3" id="BPMNEdge_flow3">
        <omgdi:waypoint x="465.0" y="177.0"></omgdi:waypoint>
        <omgdi:waypoint x="510.0" y="177.0"></omgdi:waypoint>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge bpmnElement="flow4" id="BPMNEdge_flow4">
        <omgdi:waypoint x="615.0" y="177.0"></omgdi:waypoint>
        <omgdi:waypoint x="660.0" y="177.0"></omgdi:waypoint>
      </bpmndi:BPMNEdge>
    </bpmndi:BPMNPlane>
  </bpmndi:BPMNDiagram>
</definitions>

使用步骤

部署activiti

  Activiti是一个工作流引擎(其实就是一堆jar包API),业务系统访问(操作)activiti的接口,就可以方便的操作流程相关数据,这样就可以把工作流环境与业务系统的环境集成在一起。

 流程定义

  使用activiti流程建模工具(activity-designer)定义业务流程(.bpmn文件) 。

  .bpmn文件就是业务流程定义文件,通过xml定义业务流程。

 流程定义部署

  activiti部署业务流程定义(.bpmn文件)。

  使用activiti提供的api把流程定义内容存储起来,在Activiti执行过程中可以查询定义的内容

  Activiti执行把流程定义内容存储在数据库中

启动一个流程实例

  流程实例也叫:ProcessInstance

  启动一个流程实例表示开始一次业务流程的运行。

  在员工请假流程定义部署完成后,如果张三要请假就可以启动一个流程实例,如果李四要请假也启动一个流程实例,两个流程的执行互相不影响。

用户查询待办任务(Task)

  因为现在系统的业务流程已经交给activiti管理,通过activiti就可以查询当前流程执行到哪了,当前用户需要办理什么任务了,这些activiti帮我们管理了,而不需要开发人员自己编写在sql语句查询。

用户办理任务

  用户查询待办任务后,就可以办理某个任务,如果这个任务办理完成还需要其它用户办理,比如采购单创建后由部门经理审核,这个过程也是由activiti帮我们完成了。

 流程结束

  当任务办理完成没有下一个任务结点了,这个流程实例就完成了。


Activiti环境

开发环境

        jdk1.8或以上版本

        Mysql5及以上版本

        Tomcat8.5

        Idea

Activiti环境

        我们使用:Activiti Betal 默认支持Spring5

下载Activiti

Activiti下载地址:http:activiti.org/download.html

Maven依赖

<dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-dependencies</artifactId>
            <version>7.0.0.Beta1</version>
        </dependency>

按照idea流程设计器

流程图设计工具

Activiti-Model(推荐)

Activiti默认的一款在线流程设计器,可在线设计.bpmn流程图文件,需要集成Activiti-Model,然后项目运行后可以在线设计流程图,推荐使用。

camunda-modeler(推荐)

基于 bpmn.io的面向 BPMN DMN和CMMN的集成建模解决方案,camunda-modeler是一款外部流程设计器,同普通安装软件一样安装完后双击.exe程序即可使用,也可以通过IDEA安装外部Tool使用。

在这里插入图片描述

 官网版本: Camunda Modeler 3.0.0 Released - Camunda

Camunda Modeler下载渠道
官网下载

https://bpmn.io/modeler/

GitHub下载

https://github.com/camunda/camunda-modeler

三、IDEA安装外部Tools
Tools——>External Tools

在这里插入图片描述

 点击OK后,重启IDEA.

点击项目右键找到External Tools ——> camunda-modeler开始流程设计

在这里插入图片描述
四、camunda-modeler学习资料
camunda流程图设计工具
https://segmentfault.com/t/camunda-modeler

下载插件Activiti BPMN visualizer


具体流程
1、创建保存BPMN保存目录
在 idea 中使用插件:Activiti BPMN visualizer,创建流程图,具体使用如下:

注:将流程图创建在 resources\activiti 包下,入下图所示


2、创建BPMN文件
在新建的 activiti 包上右键,选择 New Activiti,填写文件名称后回车即可创建完成

 

 

3、编写具体流程
在创建好的文件中任意位置右键,选择 View BPMN Diagram,打开可视化界面(流程定义的界面)

 打开可视化编辑器,右键start events –>start event画一个开始事件。

 在绘图界面右键,打开对应的菜单,选择后绘制,选择当前节点,在下方出现对应的属性,根据需要可以配置,如下图所示:

 生成.png图片文件
在流程图中点击右键生成

注:此处可能生成的图片的时候没有描述,只有相关图片,此处解决方案为下图所示
右键我的的流程的xml文件选择Diagrams

选择你要保存的目录为止,此处建议和xml文件保存在一处

 

Activiti 支持的数据库

activiti 支持的数据库和版本如下:

 在MySQL生成表

创建数据库
创建 mysql 数据库 activiti (名字任意):

CREATE DATABASE activiti DEFAULT CHARACTER SET utf8;

使用java代码生成表
1) 创建 java 工程
使用idea 创建 java 的maven工程,取名:activiti01。

2) 加入 maven 依赖的坐标(jar 包)
首先需要在 java 工程中加入 ProcessEngine 所需要的 jar 包,包括:

  1. activiti-engine-7.1.0.M6.jar (我们使用maven)
  2. activiti 依赖的 jar 包: mybatis、 alf4j、 log4j 等
  3. activiti 依赖的 spring 包
  4. mysql数据库驱动
  5. 第三方数据连接池 dbcp
  6. 单元测试 Junit-4.12.jar

我们使用 maven 来实现项目的构建,所以应当导入这些 jar 所对应的坐标到 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>com.itheima</groupId>
    <artifactId>activiti01</artifactId>
    <version>1.0-SNAPSHOT</version>

    <!-- activiti 的相关包 mysql的驱动包 mybatis log4j 数据库链接池-->
    <properties>
        <slf4j.version>1.6.6</slf4j.version>
        <log4j.version>1.2.12</log4j.version>
        <activiti.version>7.1.0.M6</activiti.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-engine</artifactId>
            <version>${activiti.version}</version>
        </dependency>
        <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-spring</artifactId>
            <version>${activiti.version}</version>
        </dependency>
        <!-- bpmn 模型处理 -->
        <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-bpmn-model</artifactId>
            <version>${activiti.version}</version>
        </dependency>
        <!-- bpmn 转换 -->
        <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-bpmn-converter</artifactId>
            <version>${activiti.version}</version>
        </dependency>
        <!-- bpmn json数据转换 -->
        <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-json-converter</artifactId>
            <version>${activiti.version}</version>
        </dependency>
        <!-- bpmn 布局 -->
        <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-bpmn-layout</artifactId>
            <version>${activiti.version}</version>
        </dependency>
        <!-- activiti 云支持 -->
        <dependency>
            <groupId>org.activiti.cloud</groupId>
            <artifactId>activiti-cloud-services-api</artifactId>
            <version>${activiti.version}</version>
        </dependency>
        <!-- mysql驱动 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.40</version>
        </dependency>
        <!-- mybatis -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.5</version>
        </dependency>
        <!-- 链接池 -->
        <dependency>
            <groupId>commons-dbcp</groupId>
            <artifactId>commons-dbcp</artifactId>
            <version>1.4</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
        <!-- log start -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>${log4j.version}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${slf4j.version}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>${slf4j.version}</version>
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.6</version>
        </dependency>
    </dependencies>

</project>

3) 添加log4j日志配置
我们使用log4j日志包,可以对日志进行配置

在resources 下创建log4j.properties

# Set root category priority to INFO and its only appender to CONSOLE.
#log4j.rootCategory=INFO, CONSOLE debug info warn error fatal
log4j.rootCategory=debug, CONSOLE, LOGFILE
# Set the enterprise logger category to FATAL and its only appender to CONSOLE.
log4j.logger.org.apache.axis.enterprise=FATAL, CONSOLE
# CONSOLE is set to be a ConsoleAppender using a PatternLayout.
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} %-6r[%15.15t] %-5p %30.30c %x - %m\n
# LOGFILE is set to be a File appender using a PatternLayout.
log4j.appender.LOGFILE=org.apache.log4j.FileAppender
log4j.appender.LOGFILE.File=f:\act\activiti.log
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%d{ISO8601} %-6r[%15.15t] %-5p %30.30c %x - %m\n

4) 添加activiti配置文件
我们使用activiti提供的默认方式来创建mysql的表。

默认方式的要求是在 resources 下创建 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"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
                    http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/contex
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
</beans>

5) 在 activiti.cfg.xml 中进行配置
默认方式要在在activiti.cfg.xml中bean的名字叫processEngineConfiguration,名字不可修改

在这里有2中配置方式:一种是单独配置数据源,一种是不单独配置数据源

1、直接配置processEngineConfiguration
processEngineConfiguration 用来创建 ProcessEngine,在创建 ProcessEngine 时会执行数据库的操作。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                    http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/contex
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
    <!-- 默认id对应的值 为processEngineConfiguration -->
    <!-- processEngine Activiti的流程引擎 -->
    <bean id="processEngineConfiguration"
          class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
        <property name="jdbcDriver" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://192.168.183.9:3306/activiti?useSSL=false&amp;useUnicode=true&amp;characterEncoding=utf-8&amp;useSSL=false&amp;serverTimezone=Asia/Shanghai&amp;characterSetResults=utf8"/>
        <property name="jdbcUsername" value="root"/>
        <property name="jdbcPassword" value="123456"/>
        <!-- activiti数据库表处理策略 -->
        <property name="databaseSchemaUpdate" value="true"/>
    </bean>
</beans>

2、配置数据源后,在processEngineConfiguration 引用
首先配置数据源

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                    http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/contex
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">

    <!-- 这里可以使用 链接池 dbcp-->
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver" />
        <property name="url" value="jdbc:mysql://192.168.183.9:3306/activiti" />
        <property name="username" value="root" />
        <property name="password" value="123456" />
        <property name="maxActive" value="3" />
        <property name="maxIdle" value="1" />
    </bean>

    <bean id="processEngineConfiguration"
          class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
        <!-- 引用数据源 上面已经设置好了-->
        <property name="dataSource" ref="dataSource" />
        <!-- activiti数据库表处理策略 -->
        <property name="databaseSchemaUpdate" value="true"/>
    </bean>
</beans>

6) java类编写程序生成表
创建一个测试类,调用activiti的工具类,生成acitivti需要的数据库表。

直接使用activiti提供的工具类ProcessEngines,会默认读取classpath下的activiti.cfg.xml文件,读取其中的数据库配置,创建 ProcessEngine,在创建ProcessEngine 时会自动创建表。

代码如下:

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngineConfiguration;
import org.junit.Test;

public class TestDemo {
    /**
     * 生成 activiti的数据库表
     */
    @Test
    public void testCreateDbTable() {
        //使用classpath下的activiti.cfg.xml中的配置创建processEngine
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        System.out.println(processEngine);
    }
}

说明:
1、运行以上程序段即可完成 activiti 表创建,通过改变 activiti.cfg.xml 中databaseSchemaUpdate 参数的值执行不同的数据表处理策略。
2 、 上 边 的 方法 getDefaultProcessEngine方法在执行时,从activiti.cfg.xml 中找固定的名称 processEngineConfiguration 。

在测试程序执行过程中,idea的控制台会输出日志,说明程序正在创建数据表,类似如下,注意红框内容:

执行完成后我们查看数据库, 创建了 25 张表,结果如下:

到这,我们就完成activiti运行需要的数据库和表的创建。
扩展

(一)创建activiti表方式一:

1、使用方法getDefaultProcessEngine
2、默认从resources下读取名字为actviti.cfg.xml的文件
3、创建processEngine时,就会创建mysql的表

    //默认方式
    ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
    RepositoryService repositoryService = processEngine.getRepositoryService();
    repositoryService.createDeployment();
    //获取流程引擎对象(此时创建activiti的表)
    ProcessEngine processEngine = processEngineConfiguration.buildProcessEngine();

(二)创建activiti表方式二:

配置文件的名字可以自定义,bean的名字也可以自定义

    ProcessEngineConfiguration processEngineConfiguration = ProcessEngineConfiguration.
    createProcessEngineConfigurationFromResource("activiti.cfg.xml","processEngineConfiguration");
    //获取流程引擎对象(此时创建activiti的表)
    ProcessEngine processEngine = processEngineConfiguration.buildProcessEngine();

表结构

表功能

序号

表分类

表名

说明

解释
一般数据

act_ge_bytearray

二进制数据表

通用的流程定义和流程资源

act_ge_property

属性数据表存储整个流程引擎级别的数据,初始化表结构时,会默认插入三条记录,

系统相关属性
流程历史记录

act_hi_actinst

历史节点表

act_hi_attachment

历史附件表

act_hi_comment

历史意见表

act_hi_identitylink

历史流程人员表

act_hi_detail

历史详情表,提供历史变量的查询

act_hi_procinst

历史流程实例表

act_hi_taskinst

历史任务实例表

10

act_hi_varinst

历史变量表

11

act_id_group

用户组信息表

12

act_id_info

用户扩展信息表

13

act_id_membership

用户与用户组对应信息表

14

act_id_user

用户信息表

流程定义表

 15

act_re_deployment

部署信息表

16  

act_re_model

流程设计模型部署表

17

act_re_procdef

流程定义数据表

运行实列表

18

act_ru_event_subscr

throwEvent、catchEvent时间监听信息表

19

act_ru_execution

运行时流程执行实例表

20

act_ru_identitylink

运行时流程人员表,主要存储任务节点与参与者的相关信息

21

act_ru_job

运行时定时任务数据表

22

act_ru_task

运行时任务节点表

23

act_ru_variable

运行时流程变量数据表

表以及索引信息

2.1  二进制数据表(act_ge_bytearray

2.1.1  简要描述

   保存流程定义图片和xml、Serializable(序列化)的变量,即保存所有二进制数据,特别注意类路径部署时候,不要把svn等隐藏文件或者其他与流程无关的文件也一起部署到该表中,会造成一些错误(可能导致流程定义无法删除)。 

2.1.2  表结构说明

字段名称

字段描述

数据类型

主键

为空

取值说明

ID_

ID_

nvarchar(64)

主键ID

REV_

乐观锁

int

Version(版本)

NAME_

名称

nvarchar(255)

部署的文件名称,如:mail.bpmn、mail.png 、mail.bpmn20.xml

DEPLOYMENT_ID_

部署ID

nvarchar(64)

部署表ID

BYTES_

字节

varbinary(max)

部署文件

GENERATED_

是否是引擎生成

tinyint

0为用户生成 1为Activiti生成

2.1.3  索引说明

索引名称

组成字段名称

索引类型

索引说明

PRIMARY

ID_

Unique

主键唯一索引

ACT_FK_BYTEARR_DEPL

DEPLOYMENT_ID_

2.2  属性数据表( act_ge_property )

2.2.1  简要描述

属性数据表。存储整个流程引擎级别的数据。

2.2.2  表结构说明

字段名称

字段描述

数据类型

主键

为空

取值说明

NAME_

名称

nvarchar(64)

schema.version

schema.history

next.dbid

VALUE_

nvarchar(300)

5.*

create(5.*)

REV_

乐观锁

int

version

2.2.3  索引说明

索引名称

组成字段名称

索引类型

索引说明

PRIMARY

NAME_

Unique

主键唯一索引

2.3  历史节点表(act_hi_actinst

2.3.1   简要描述

  历史活动信息。这里记录流程流转过的所有节点,与HI_TASKINST不同的是,taskinst只记录usertask内容

2.3.2   表结构说明

字段名称

字段描述

数据类型

主键

为空

取值说明

ID_

ID_

nvarchar(64)

PROC_DEF_ID_

流程定义ID

nvarchar(64)

PROC_INST_ID_

流程实例ID

nvarchar(64)

EXECUTION_ID_

执行实例ID

nvarchar(64)

ACT_ID_

节点ID

nvarchar(225)

节点定义ID

TASK_ID_

任务实例ID

nvarchar(64)

任务实例ID 其他节点类型实例ID在这里为空

CALL_PROC_INST_ID_

调用外部的流程实例ID

nvarchar(64)

调用外部流程的流程实例ID'

ACT_NAME_

节点名称

nvarchar(225)

节点定义名称

ACT_TYPE_

节点类型

nvarchar(225)

如startEvent、userTask

ASSIGNEE_

签收人

nvarchar(64)

节点签收人

START_TIME_

开始时间

datetime

2013-09-15 11:30:00

END_TIME_

结束时间

datetime

2013-09-15 11:30:00

DURATION_

耗时

numeric(19,0)

毫秒值

 2.3.3   索引说明

索引名称

组成字段名称

索引类型

索引说明

PRIMARY

ID_

Unique

主键唯一索引

ACT_IDX_HI_ACT_INST_START

START_TIME_

ACT_IDX_HI_ACT_INST_END

END_TIME_

ACT_IDX_HI_ACT_INST_PROCINST

PROC_INST_ID_ 、 ACT_ID_

ACT_IDX_HI_ACT_INST_EXEC

EXECUTION_ID_ 、 ACT_ID_

2.4  历史附件表( act_hi_attachment )

2.4.1  简要描述

  历史附件表。

2.4.2   表结构说明

字段名称

字段描述

数据类型

主键

为空

取值说明

ID_

ID_

nvarchar(64)

主键ID

REV_

乐观锁

integer

Version

USER_ID_

用户ID

nvarchar(255)

用户ID

NAME_

名称

nvarchar(255)

附件名称

DESCRIPTION_

描述

nvarchar(4000)

描述

TYPE_

类型

nvarchar(255)

附件类型

TASK_ID_

任务实例ID

nvarchar(64)

节点实例ID

PROC_INST_ID_

流程实例ID

nvarchar(64)

流程实例ID

URL_

URL_

nvarchar(4000)

附件地址

CONTENT_ID_

字节表的ID

nvarchar(64)

ACT_GE_BYTEARRAY的ID

 2.4.3   索引说明

索引名称

组成字段名称

索引类型

索引说明

PRIMARY

ID_

Unique

主键唯一索引

2.5  历史意见表( act_hi_comment )

2.5.1   简要描述

  历史意见表。

2.5.2   表结构说明

字段名称

字段描述

数据类型

主键

为空

取值说明

ID_

ID_

nvarchar(64)

主键ID

TYPE_

类型

nvarchar(255)

类型:event(事件)

comment(意见)

TIME_

时间

datetime

填写时间'

USER_ID_

用户ID

nvarchar(64)

填写人

TASK_ID_

节点任务ID

nvarchar(64)

节点实例ID

PROC_INST_ID_

流程实例ID

nvarchar(255)

流程实例ID

ACTION_

行为类型

nvarchar(64)

见备注1

MESSAGE_

基本内容

nvarchar(4000)

用于存放流程产生的信息,比如审批意见

FULL_MSG_

全部内容

varbinary(max)

附件地址

 2.5.3   索引说明

索引名称

组成字段名称

索引类型

索引说明

PRIMARY

ID_

Unique

主键唯一索引

2.6  历史详情表( act_hi_detail )

2.6.1   简要描述

  历史详情表:流程中产生的变量详细,包括控制流程流转的变量,业务表单中填写的流程需要用到的变量等。

2.6.2   表结构说明

字段名称

字段描述

数据类型

主键

为空

取值说明

ID_

ID_

nvarchar(64)

主键

TYPE_

类型

nvarchar(255)

见备注2

PROC_INST_ID_

流程实例ID

nvarchar(64)

流程实例ID

EXECUTION_ID_

执行实例ID

nvarchar(64)

执行实例ID

TASK_ID_

任务实例ID

nvarchar(64)

任务实例ID

ACT_INST_ID_

节点实例ID

nvarchar(64)

ACT_HI_ACTINST表的ID

NAME_

名称

nvarchar(255)

名称

VAR_TYPE_

参数类型

nvarchar(255)

见备注3

REV_

乐观锁

int

Version

TIME_

时间戳

datetime

创建时间

BYTEARRAY_ID_

字节表ID

nvarchar

ACT_GE_BYTEARRAY表的ID

DOUBLE_

DOUBLE_

double precision

存储变量类型为Double

LONG_

LONG_

numeric

存储变量类型为long

TEXT_

TEXT_

nvarchar

存储变量值类型为String

TEXT2_

TEXT2_

nvarchar

此处存储的是JPA持久化对象时,才会有值。此值为对象ID

 2.6.3   索引说明

索引名称

组成字段名称

索引类型

索引说明

PRIMARY

ID_

Unique

主键唯一索引

ACT_IDX_HI_ACT_INST_START

START_TIME_

ACT_IDX_HI_ACT_INST_END

END_TIME_

ACT_IDX_HI_ACT_INST_PROCINST

PROC_INST_ID_ 、 ACT_ID_

ACT_IDX_HI_ACT_INST_EXEC

EXECUTION_ID_ 、 ACT_ID_

2.7  历史流程人员表( act_ru_identitylink )   

2.7.1   简要描述

  任务参与者数据表。主要存储历史节点参与者的信息。

2.7.2  表结构说明

字段名称

字段描述

数据类型

主键

为空

取值说明

ID_

ID_

nvarchar(64)

ID_

GROUP_ID_

组ID

nvarchar(255)

组ID

TYPE_

类型

nvarchar(255)

备注4

USER_ID_

用户ID

nvarchar(255)

用户ID

TASK_ID_

节点实例ID

nvarchar(64)

节点实例ID

PROC_INST_ID_

流程实例ID

nvarchar(64)

流程实例ID

 2.7.3   索引说明

索引名称

组成字段名称

索引类型

索引说明

PRIMARY

ID_

Unique

主键唯一索引

ACT_IDX_HI_IDENT_LNK_USER

USER_ID_

Unique

ACT_IDX_HI_IDENT_LNK_TASK

TASK_ID_

ACT_IDX_HI_IDENT_LNK_PROCINST

PROC_INST_ID_

2.8  历史流程实例表(act_hi_procinst

2.8.1   简要描述

  历史流程实例表。

2.8.2   表结构说明

字段名称

字段描述

数据类型

主键

为空

取值说明

ID_

ID_

nvarchar(64)

主键ID

PROC_INST_ID_

流程实例ID

nvarchar(64)

流程实例ID

BUSINESS_KEY_

业务主键

nvarchar(255)

业务主键,业务表单的ID

PROC_DEF_ID_

流程定义ID

nvarchar(64)

流程定义ID

START_TIME_

开始时间

datetime

开始时间

END_TIME_

结束时间

datetime

结束时间

DURATION_

耗时

Numeric(19)

耗时

START_USER_ID_

起草人

nvarchar(255)

起草人

START_ACT_ID_

开始节点ID

nvarchar(255)

起草环节ID

END_ACT_ID_

结束节点ID

nvarchar(255)

结束环节ID

SUPER_PROCESS

_INSTANCE_ID_

父流程实例ID

nvarchar(64)

父流程实例ID

DELETE_REASON_

删除原因

nvarchar(4000)

删除原因

2.8.3   索引说明

索引名称

组成字段名称

索引类型

索引说明

PRIMARY

ID_

Unique

主键唯一索引

PROC_INST_ID_

PROC_INST_ID_

Unique

外键

ACT_UNIQ_HI_BUS_KEY

PROC_DEF_ID_,BUSINESS_KEY_

Unique

ACT_IDX_HI_PRO_INST_END

END_TIME_

ACT_IDX_HI_PRO_I_BUSKEY

BUSINESS_KEY_

2.9 历史任务实例表( act_hi_taskinst )

2.9.1   简要描述

   历史任务实例表。

2.9.2   表结构说明

字段名称

字段描述

数据类型

主键

为空

取值说明

ID_

ID_

nvarchar(64)

主键ID

PROC_DEF_ID_

流程定义ID

nvarchar(64)

流程定义ID

TASK_DEF_KEY_

节点定义ID

nvarchar(255)

节点定义ID

PROC_INST_ID_

流程实例ID

nvarchar(64)

流程实例ID

EXECUTION_ID_

执行实例ID

nvarchar(64)

执行实例ID

NAME_

名称

varchar(255)

名称

PARENT_TASK_ID_

父节点实例ID

nvarchar(64)

父节点实例ID

DESCRIPTION_

描述

nvarchar(400)

描述

OWNER_

实际签收人 任务的拥有者

nvarchar(255)

签收人(默认为空,只有在委托时才有值)

ASSIGNEE_

签收人或被委托

nvarchar(255)

签收人或被委托

START_TIME_

开始时间

datetime

开始时间

CLAIM_TIME_

提醒时间

datetime

提醒时间

END_TIME_

结束时间

datetime

结束时间

DURATION_

耗时

numeric(19)

耗时

DELETE_REASON_

删除原因

nvarchar(4000)

删除原因(completed,deleted)

PRIORITY_

优先级别

int

优先级别

DUE_DATE_

过期时间

datetime

过期时间,表明任务应在多长时间内完成

FORM_KEY_

节点定义的

formkey

nvarchar(255)

desinger节点定义的

form_key属性

 2.9.3   索引说明

索引名称

组成字段名称

索引类型

索引说明

PRIMARY

ID_

Unique

主键唯一索引

2.10       历史变量表( act_hi_varinst )

2.10.1  简要描述

  历史变量表。

2.10.2  表结构说明

字段名称

字段描述

数据类型

主键

为空

取值说明

ID_

ID_

nvarchar(64)

ID_

PROC_INST_ID_

流程实例ID

nvarchar(64)

流程实例ID

EXECUTION_ID_

执行实例ID

nvarchar(255)

执行实例ID

TASK_ID_

任务实例ID

nvarchar(64)

任务实例ID

NAME_

名称

nvarchar(64)

参数名称(英文)

VAR_TYPE_

参数类型

varchar(255)

备注5

REV_

乐观锁

nvarchar(64)

乐观锁 Version

BYTEARRAY_ID_

字节表ID

nvarchar(400)

ACT_GE_BYTEARRAY表的主键

DOUBLE_

DOUBLE_

nvarchar(255)

存储DoubleType类型的数据

LONG_

LONG_

nvarchar(255)

存储LongType类型的数据

TEXT_

TEXT_

datetime

备注6

TEXT2_

TEXT2_

datetime

此处存储的是JPA持久化对象时,才会有值。此值为对象ID

2.10.3  索引说明

索引名称

组成字段名称

索引类型

索引说明

PRIMARY

ID_

Unique

主键唯一索引

ACT_IDX_HI_PROCVAR_PROC_INST

PROC_INST_ID_

ACT_IDX_HI_PROCVAR_NAME_TYPE

NAME_, VAR_TYPE_

2.11       用户组信息表( act_id_group )

2.11.1  简要描述

  用来存储用户组信息。

2.11.2  表结构说明

字段名称

字段描述

数据类型

主键

为空

取值说明

ID_

ID_

nvarchar(64)

主键ID

REV_

乐观锁

int

乐观锁Version

NAME_

名称

nvarchar(255)

组名称

TYPE_

类型

nvarchar(255)

类型

2.11.3  索引说明

索引名称

组成字段名称

索引类型

索引说明

PRIMARY

ID_

Unique

主键唯一索引

2.12       用户扩展信息表( act_id_info )

2.12.1  简要描述

  用户扩展信息表。目前该表未用到~~~~~·

2.12.2  表结构说明

字段名称

字段描述

数据类型

主键

为空

取值说明

ID_

ID_

nvarchar(64)

主键ID

REV_

乐观锁

int

乐观锁Version

USER_ID_

用户ID

nvarchar(64)

TYPE_

类型

nvarchar(64)

KEY_

nvarchar(255)

VALUE_

nvarchar(255)

PASSWORD_

Image

PARENT_ID_

nvarchar(255)

2.12.3  索引说明

索引名称

组成字段名称

索引类型

索引说明

PRIMARY

ID_

Unique

主键唯一索引

2.13       用户与分组对应信息表( act_id_membership )

2.13.1  简要描述

    用来保存用户的分组信息。

2.13.2  表结构说明

字段名称

字段描述

数据类型

主键

为空

取值说明

USER_ID

用户ID

nvarchar(64)

GROUP_ID

用户组ID

nvarchar(64)

2.13.3  索引说明

索引名称

组成字段名称

索引类型

索引说明

PRIMARY

USER_ID_, GROUP_ID_

Unique

主键唯一索引

ACT_FK_MEMB_GROUP

GROUP_ID_

2.14       用户信息表( act_id_user )

2.14.1  简要描述

  工作流用户信息

2.14.2  表结构说明

字段名称

字段描述

数据类型

主键

为空

取值说明

ID_

ID_

nvarchar(64)

主键ID

REV_

乐观锁

int

乐观锁Version

FIRST_

nvarchar(255)

LAST_

nvarchar(255)

EMAIL_

EMAIL_

nvarchar(255)

PWD_

密码

nvarchar(255)

PICTURE_ID_

图片ID

nvarchar(64)

2.14.3 索引说明

索引名称

组成字段名称

索引类型

索引说明

PRIMARY

ID_

Unique

主键唯一索引

2.15       部署信息表( act_re_deployment )

2.15.1  简要描述

    部署流程定义时需要被持久化保存下来的信息。

2.15.2  表结构说明

字段名称

字段描述

数据类型

主键

为空

取值说明

ID_

ID_

nvarchar(64)

主键ID

NAME_

部署名称

nvarchar(255)

部署文件名

CATEGORY_

分类

nvarchar(255)

类别

DEPLOY_TIME_

部署时间

datetime

部署时间

2.15.3  索引说明

索引名称

组成字段名称

索引类型

索引说明

PRIMARY

ID_

Unique

主键唯一索引

2.16       流程设计模型部署表( act_re_model )

2.16.1  简要描述

  流程设计器设计流程后,保存数据到该表。

2.16.2  表结构说明

字段名称

字段描述

数据类型

主键

为空

取值说明

ID_

ID_

nvarchar(64)

ID_

REV_

乐观锁

int

乐观锁

NAME_

名称

nvarchar(255)

名称

KEY_

KEY_

nvarchar(255)

分类,例如:

http://www.mossle.com/docs/activiti/

CATEGORY_

分类

nvarchar(255)

分类

CREATE_TIME_

创建时间

datetime

创建时间

LAST_UPDATE_TIME_

最新修改时间

datetime

最新修改时间

VERSION_

版本

int

版本

META_INFO_

META_INFO_

nvarchar(255)

以json格式保存流程定义的信息

DEPLOYMENT_ID_

部署ID

nvarchar(255)

部署ID

EDITOR_SOURCE_VALUE_ID_

datetime

EDITOR_SOURCE_EXTRA_VALUE_ID_

datetime

2.16.3  索引说明

索引名称

组成字段名称

索引类型

索引说明

PRIMARY

ID_

Unique

主键唯一索引

ACT_FK_MODEL_SOURCE

EDITOR_SOURCE_VALUE_ID_

ACT_FK_MODEL_SOURCE_EXTRA

EDITOR_SOURCE_EXTRA_VALUE_ID_

ACT_FK_MODEL_DEPLOYMENT

DEPLOYMENT_ID_

2.17       流程定义数据表( act_re_procdef )

2.17.1  简要描述

   业务流程定义数据表。此表和ACT_RE_DEPLOYMENT是多对一的关系,即,一个部署的bar包里可能包含多个流程定义文件,每个流程定义文件都会有一条记录在ACT_REPROCDEF表内,每个流程定义的数据,都会对于ACT_GE_BYTEARRAY表内的一个资源文件和PNG图片文件。和ACT_GE_BYTEARRAY的关联是通过程序用ACT_GE_BYTEARRAY.NAME与ACT_RE_PROCDEF.NAME_完成的,在数据库表结构中没有体现

2.17.2  表结构说明

字段名称

字段描述

数据类型

主键

为空

取值说明

ID_

ID_

nvarchar(64)

ID_

REV_

乐观锁

int

乐观锁

CATEGORY_

分类

nvarchar(255)

流程定义的Namespace就是类别

NAME_

名称

nvarchar(255)

名称

KEY_

定义的KEY

nvarchar(255)

流程定义ID

VERSION_

版本

int

版本

DEPLOYMENT_ID_

部署表ID

nvarchar(64)

部署表ID

RESOURCE_NAME_

bpmn文件名称

nvarchar(4000)

流程bpmn文件名称

DGRM_RESOURCE_NAME_

png图片名称

nvarchar(4000)

流程图片名称

DESCRIPTION_

描述

nvarchar(4000)

描述

HAS_START_FORM_KEY_

是否存在开始节点formKey

tinyint

start节点是否存在formKey

 0否  1是

SUSPENSION_STATE_

是否挂起

tinyint

1 激活 2挂起

2.17.3  索引说明

索引名称

组成字段名称

索引类型

索引说明

PRIMARY

ID_

Unique

主键唯一索引

ACT_UNIQ_PROCDEF

KEY_, VERSION_

Unique

2.18      ( act_ru_event_subscr )

2.18.1  简要描述

    没有用到该表~~~ 网上找到的资料~~~不足之处请说明补充 谢谢~~

2.18.2  表结构说明

字段名称

字段描述

数据类型

主键

为空

取值说明

ID_

事件ID

nvarchar(64)

事件ID

REV_

版本

int

乐观锁Version

EVENT_TYPE_

事件类型

nvarchar(255)

事件类型

EVENT_NAME_

事件名称

nvarchar(255)

事件名称

EXECUTION_ID_

执行实例ID

nvarchar(64)

执行实例ID

PROC_INST_ID_

流程实例ID

nvarchar(64)

流程实例ID

ACTIVITY_ID_

活动实例ID

nvarchar(64)

活动实例ID

CONFIGURATION_

配置

nvarchar(255)

配置

CREATED_

是否创建

datetime

默认值 当前系统时间戳

CURRENT_TIMESTAMP

2.18.3  索引说明

索引名称

组成字段名称

索引类型

索引说明

PRIMARY

ID_

Unique

主键唯一索引

ACT_IDX_EVENT_SUBSCR_CONFIG_

CONFIGURATION_

ACT_FK_EVENT_EXEC

EXECUTION_ID_

2.19       运行时流程执行实例表( act_ru_execution )

2.19.1  简要描述

流程执行记录表。

2.19.2  表结构说明

字段名称

字段描述

数据类型

主键

为空

取值说明

ID_

ID_

nvarchar(64)

ID_

REV_

乐观锁

int

乐观锁

PROC_INST_ID_

流程实例ID

nvarchar(64)

流程实例ID

BUSINESS_KEY_

业务主键ID

nvarchar(255)

业务主键ID

PARENT_ID_

父节点实例ID

nvarchar(64)

父节点实例ID

PROC_DEF_ID_

流程定义ID

nvarchar(64)

流程定义ID

SUPER_EXEC_

SUPER_EXEC_

nvarchar(64)

SUPER_EXEC_

ACT_ID_

节点实例ID

nvarchar(255)

节点实例ID即

ACT_HI_ACTINST中ID

IS_ACTIVE_

是否存活

tinyint

是否存活

IS_CONCURRENT_

是否并行

tinyint

是否为并行(true/false)

IS_SCOPE_

IS_SCOPE_

tinyint

IS_SCOPE_

IS_EVENT_SCOPE_

IS_EVENT_SCOPE_

tinyint

IS_EVENT_SCOPE_

SUSPENSION_STATE_

是否挂起

tinyint

挂起状态   1激活 2挂起

CACHED_ENT_STATE_

int

2.19.3  索引说明

索引名称

组成字段名称

索引类型

索引说明

PRIMARY

ID_

Unique

主键唯一索引

ACT_UNIQ_RU_BUS_KEY

PROC_DEF_ID_, BUSINESS_KEY_

Unique

ACT_IDX_EXEC_BUSKEY

BUSINESS_KEY_

ACT_FK_EXE_PROCINST

PROC_INST_ID_

ACT_FK_EXE_PARENT

PARENT_ID_

ACT_FK_EXE_SUPER

SUPER_EXEC_

2.20       运行时流程人员表( act_ru_identitylink )

2.20.1  简要描述

任务参与者数据表。主要存储当前节点参与者的信息。

2.20.2  表结构说明

字段名称

字段描述

数据类型

主键

为空

取值说明

ID_

ID_

nvarchar(64)

ID_

REV_

乐观锁

int

乐观锁

GROUP_ID_

组ID

nvarchar(64)

组ID

TYPE_

类型

nvarchar(255)

备注7

USER_ID_

用户ID

nvarchar(64)

用户ID

TASK_ID_

节点实例ID

nvarchar(64)

节点实例ID

PROC_INST_ID_

流程实例ID

nvarchar(64)

流程实例ID

PROC_DEF_ID_

流程定义ID

nvarchar(255)

流程定义ID

2.20.3  索引说明

索引名称

组成字段名称

索引类型

索引说明

PRIMARY

ID_

Unique

主键唯一索引

ACT_IDX_IDENT_LNK_USER

USER_ID_

Unique

ACT_IDX_IDENT_LNK_GROUP

GROUP_ID_

ACT_IDX_ATHRZ_PROCEDEF

PROC_DEF_ID_

ACT_FK_TSKASS_TASK

TASK_ID_

ACT_FK_IDL_PROCINST

PROC_INST_ID_

2.21       运行时定时任务数据表( act_ru_job )

2.21.1  简要描述

运行时定时任务数据表。用到网上找的资料 字段描述..

2.21.2  表结构说明

字段名称

字段描述

数据类型

主键

为空

取值说明

ID_

标识

nvarchar(64)

标识

REV_

版本

int

版本

TYPE_

类型

nvarchar(255)

类型

LOCK_EXP_TIME_

锁定释放时间

datetime

锁定释放时间

LOCK_OWNER_

挂起者

nvarchar(255)

挂起者

EXCLUSIVE_

bit

EXECUTION_ID_

执行实例ID

nvarchar(64)

执行实例ID

PROCESS_INSTANCE_ID_

流程实例ID

nvarchar(64)

流程实例ID

PROC_DEF_ID_

流程定义ID

nvarchar(64)

流程定义ID

RETRIES_

int

EXCEPTION_STACK_ID_

异常信息ID

nvarchar(64)

异常信息ID

EXCEPTION_MSG_

异常信息

nvarchar(4000)

异常信息

DUEDATE_

到期时间

datetime

到期时间

REPEAT_

重复

nvarchar(255)

重复

HANDLER_TYPE_

处理类型

nvarchar(255)

处理类型

HANDLER_CFG_

nvarchar(4000)

标识

2.21.3  索引说明

索引名称

组成字段名称

索引类型

索引说明

PRIMARY

ID_

Unique

主键唯一索引

ACT_FK_JOB_EXCEPTION

EXCEPTION_STACK_ID_

2.22       运行时任务节点表( act_ru_task )

2.22.1  简要描述

行时任务数据表。

2.22.2  表结构说明

字段名称

字段描述

数据类型

主键

为空

取值说明

ID_

ID_

nvarchar(64)

ID_

REV_

乐观锁

int

乐观锁

EXECUTION_ID_

执行实例ID

nvarchar(64)

执行实例ID

PROC_INST_ID_

流程实例ID

nvarchar(64)

流程实例ID

PROC_DEF_ID_

流程定义ID

nvarchar(64)

流程定义ID

NAME_

节点定义名称

nvarchar(255)

节点定义名称

PARENT_TASK_ID_

父节点实例ID

nvarchar(64)

父节点实例ID

DESCRIPTION_

节点定义描述

nvarchar(4000)

节点定义描述

TASK_DEF_KEY_

节点定义的KEY

nvarchar(255)

任务定义的ID

OWNER_

实际签收人

nvarchar(255)

拥有者(一般情况下为空,只有在委托时才有值)

ASSIGNEE_

签收人或委托人

nvarchar(255)

签收人或委托人

DELEGATION_

委托类型

nvarchar(64)

备注8

PRIORITY_

优先级别

int

优先级别,默认为:50

CREATE_TIME_

创建时间

datetime

创建时间

DUE_DATE_

过期时间

datetime

耗时

SUSPENSION_STATE_

是否挂起

int

1代表激活 2代表挂起

2.22.3  索引说明

索引名称

组成字段名称

索引类型

索引说明

PRIMARY

ID_

Unique

主键唯一索引

ACT_IDX_TASK_CREATE

CREATE_TIME_

ACT_FK_TASK_EXE

EXECUTION_ID_

ACT_FK_TASK_PROCINST

PROC_INST_ID_

ACT_FK_TASK_PROCDEF

PROC_DEF_ID_

2.23       运行时流程变量数据表( act_ru_variable )

2.23.1  简要描述

运行时流程变量数据表。

2.23.2  表结构说明

字段名称

字段描述

数据类型

主键

为空

取值说明

ID_

ID_

nvarchar(64)

主键标识

REV_

乐观锁

int

乐观锁

TYPE_

类型

nvarchar(255)

备注9

NAME_

名称

nvarchar(255)

变量名称

EXECUTION_ID_

执行实例ID

nvarchar(64)

执行的ID

PROC_INST_ID_

流程实例ID

nvarchar(64)

流程实例ID

TASK_ID_

节点实例ID

nvarchar(64)

节点实例ID(Local)

BYTEARRAY_ID_

字节表ID

nvarchar(64)

字节表的ID

(ACT_GE_BYTEARRAY)

DOUBLE_

DOUBLE_

float

存储变量类型为Double

LONG_

LONG_

numeric(19)

存储变量类型为long

TEXT_

TEXT_

nvarchar(4000)

'存储变量值类型为String

   如此处存储持久化对象时,值jpa对象的class

TEXT2_

TEXT2_

nvarchar(4000)

此处存储的是JPA持久化对象时,才会有值。此值为对象ID

2.23.3  索引说明

索引名称

组成字段名称

索引类型

索引说明

PRIMARY

ID_

Unique

主键唯一索引

ACT_IDX_VARIABLE_TASK_ID

TASK_ID_

ACT_FK_VAR_EXE

EXECUTION_ID_

ACT_FK_VAR_PROCINST

PROC_INST_ID_

ACT_FK_VAR_BYTEARRAY

BYTEARRAY_ID_

备注:

备注1:行为类型。值为下列内容中的一种:

    AddUserLink、DeleteUserLink、AddGroupLink、DeleteGroupLink、AddComment、AddAttachment、DeleteAttachment

备注2类型:

   FormProperty,   //表单

   VariableUpdate  //参数

备注3、5、9:参数类型:

 jpa-entity、boolean、bytes、serializable(可序列化)、自定义type(根据你自身配置)、

 CustomVariableType、date、double、integer、long、null、short、string

备注4、7:类型,主要分为以下几种:

   assignee 、  candidate 、 owner 、starter 、participant

备注6:

 存储变量值类型为String,如此处存储持久化对象时,值jpa对象的class

备注8:委托类型,DelegationState分为两种:PENDING,RESOLVED。如无委托则为空

Activiti类关系图

上面我们完成了Activiti数据库表的生成,java代码中我们调用Activiti的工具类,下面来了解Activiti的类关系

4.1 类关系图


在新版本中,我们通过实验可以发现IdentityService,FormService两个Serivce都已经删除了。

 所以后面我们对于这两个Service也不讲解了,但老版本中还是有这两个Service,同学们需要了解一下

4.2 activiti.cfg.xml

activiti的引擎配置文件,包括:ProcessEngineConfiguration的定义、数据源定义、事务管理器等,此文件其实就是一个spring配置文件。

4.3 流程引擎配置类

流程引擎的配置类(ProcessEngineConfiguration),通过ProcessEngineConfiguration可以创建工作流引擎ProceccEngine,常用的两种方法如下:

4.3.1 StandaloneProcessEngineConfiguration

使用StandaloneProcessEngineConfigurationActiviti可以单独运行,来创建ProcessEngine,Activiti会自己处理事务。

配置文件方式:

通常在activiti.cfg.xml配置文件中定义一个id为 processEngineConfiguration 的bean.

方法如下:

<!--在默认方式下 bean的id固定为processEngineConfiguration-->

<bean id="processEngineConfiguration"
          class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
        <!--配置数据库相关的信息-->
        <!--数据库驱动-->
        <property name="jdbcDriver" value="com.mysql.jdbc.Driver"/>
        <!--数据库链接-->
        <property name="jdbcUrl" value="jdbc:mysql:///activiti"/>
        <!--数据库用户名-->
        <property name="jdbcUsername" value="root"/>
        <!--数据库密码-->
        <property name="jdbcPassword" value="123456"/>
        <!--actviti数据库表在生成时的策略  true - 如果数据库中已经存在相应的表,那么直接使用,如果不存在,那么会创建-->
        <property name="databaseSchemaUpdate" value="true"/>
    </bean>

还可以加入连接池:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                    http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/contex
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql:///activiti"/>
        <property name="username" value="root"/>
        <property name="password" value="123456"/>
        <property name="maxActive" value="3"/>
        <property name="maxIdle" value="1"/>
    </bean>
    <!--在默认方式下 bean的id  固定为 processEngineConfiguration-->
    <bean id="processEngineConfiguration"
          class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
        <!--引入上面配置好的 链接池-->
        <property name="dataSource" ref="dataSource"/>
        <!--actviti数据库表在生成时的策略  true - 如果数据库中已经存在相应的表,那么直接使用,如果不存在,那么会创建-->
        <property name="databaseSchemaUpdate" value="true"/>
    </bean>
</beans>

4.3.2 SpringProcessEngineConfiguration

通过org.activiti.spring.SpringProcessEngineConfiguration 与Spring整合。

创建spring与activiti的整合配置文件:

activity-spring.cfg.xml(名称可修改)

<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
   xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans 
      http://www.springframework.org/schema/beans/spring-beans-3.1.xsd 
      http://www.springframework.org/schema/mvc 
      http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd 
      http://www.springframework.org/schema/context 
       http://www.springframework.org/schema/context/spring-context-3.1.xsd 
      http://www.springframework.org/schema/aop 
      http://www.springframework.org/schema/aop/spring-aop-3.1.xsd 
      http://www.springframework.org/schema/tx 
      http://www.springframework.org/schema/tx/spring-tx-3.1.xsd ">
   <!-- 工作流引擎配置bean -->
   <bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration">
      <!-- 数据源 -->
      <property name="dataSource" ref="dataSource" />
      <!-- 使用spring事务管理器 -->
      <property name="transactionManager" ref="transactionManager" />
      <!-- 数据库策略 -->
      <property name="databaseSchemaUpdate" value="drop-create" />
      <!-- activiti的定时任务关闭 -->
     <property name="jobExecutorActivate" value="false" />
   </bean>
   <!-- 流程引擎 -->
   <bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean">
      <property name="processEngineConfiguration" ref="processEngineConfiguration" />
   </bean>
   <!-- 资源服务service -->
   <bean id="repositoryService" factory-bean="processEngine"
      factory-method="getRepositoryService" />
   <!-- 流程运行service -->
   <bean id="runtimeService" factory-bean="processEngine"
      factory-method="getRuntimeService" />
   <!-- 任务管理service -->
   <bean id="taskService" factory-bean="processEngine"
      factory-method="getTaskService" />
   <!-- 历史管理service -->
   <bean id="historyService" factory-bean="processEngine" factory-method="getHistoryService" />
   <!-- 用户管理service -->
   <bean id="identityService" factory-bean="processEngine" factory-method="getIdentityService" />
   <!-- 引擎管理service -->
   <bean id="managementService" factory-bean="processEngine" factory-method="getManagementService" />
   <!-- 数据源 -->
   <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
      <property name="driverClassName" value="com.mysql.jdbc.Driver" />
      <property name="url" value="jdbc:mysql://localhost:3306/activiti" />
      <property name="username" value="root" />
      <property name="password" value="mysql" />
      <property name="maxActive" value="3" />
      <property name="maxIdle" value="1" />
   </bean>
   <!-- 事务管理器 -->
   <bean id="transactionManager"
    class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
      <property name="dataSource" ref="dataSource" />
   </bean>
   <!-- 通知 -->
   <tx:advice id="txAdvice" transaction-manager="transactionManager">
      <tx:attributes></tx:attributes>
          <!-- 传播行为 -->
          <tx:method name="save*" propagation="REQUIRED" />
          <tx:method name="insert*" propagation="REQUIRED" />
          <tx:method name="delete*" propagation="REQUIRED" />
          <tx:method name="update*" propagation="REQUIRED" />
          <tx:method name="find*" propagation="SUPPORTS" read-only="true" />
          <tx:method name="get*" propagation="SUPPORTS" read-only="true" />
       </tx:attributes>
   </tx:advice>
   <!-- 切面,根据具体项目修改切点配置 -->
   <aop:config proxy-target-class="true">
      <aop:advisor advice-ref="txAdvice"  pointcut="execution(* com.itheima.ihrm.service.impl.*.(..))"* />
  </aop:config>
</beans>

创建processEngineConfiguration

ProcessEngineConfiguration configuration = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml")

​ 上边的代码要求activiti.cfg.xml中必须有一个processEngineConfiguration的bean

也可以使用下边的方法,更改bean 的名字:

ProcessEngineConfiguration.createProcessEngineConfigurationFromResource(String resource, String beanName);

4.4 工作流引擎创建

工作流引擎(ProcessEngine),相当于一个门面接口,通过ProcessEngineConfiguration创建processEngine,通过ProcessEngine创建各个service接口。

4.4.1 默认创建方式

将activiti.cfg.xml文件名及路径固定,且activiti.cfg.xml文件中有 processEngineConfiguration的配置, 可以使用如下代码创建processEngine:

//直接使用工具类 ProcessEngines,使用classpath下的activiti.cfg.xml中的配置创建processEngine
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
System.out.println(processEngine);

4.4.2 一般创建方式

//先构建ProcessEngineConfiguration
ProcessEngineConfiguration configuration = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml");
//通过ProcessEngineConfiguration创建ProcessEngine,此时会创建数据库
ProcessEngine processEngine = configuration.buildProcessEngine();

代码如下:


import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngineConfiguration;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class JwtApplicationTests {

    @Test
    void contextLoads() {
    }
    /**
     * 生成 activiti的数据库表
     */
    @Test
    public void testCreateDbTable() {
        /*
        * 需要使用activiti提供的工具类ProcessEngines,提供的getDefaultProcessEngine
        * getDefaultProcessEngine会默认resources下读取名字为activiti.cfg.xml的文件
        * 创建Process时就会创建mysql的表
        * 默认方式
        *  //使用classpath下的activiti.cfg.xml中的配置创建processEngine
        * ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        * RepositoryService repositoryService = processEngine.getRepositoryService();
        * repositoryService.createDeployment();
        * */
        //使用自定义的方式
        //配置文件的名字可以自定义,bean的名字也可以自定义
        ProcessEngineConfiguration processEngineConfiguration = ProcessEngineConfiguration
                .createProcessEngineConfigurationFromResource("activiti.cfg.xml"
                        , "processEngineConfiguration");
        //获取流程引擎对象
        ProcessEngine processEngine = processEngineConfiguration
                .buildProcessEngine();
        System.out.println(processEngine);
    }
}

4.5 Servcie服务接口

Service是工作流引擎提供用于进行工作流部署、执行、管理的服务接口,我们使用这些接口可以就是操作服务对应的数据表

4.5.1 Service创建方式

通过ProcessEngine创建Service

方式如下:

RuntimeService runtimeService = processEngine.getRuntimeService();
RepositoryService repositoryService = processEngine.getRepositoryService();
TaskService taskService = processEngine.getTaskService();

4.5.2 Service总览

service名称 service作用
RepositoryService activiti的资源管理类
RuntimeServiceactiviti的流程运行管理类
TaskServiceactiviti的任务管理类
HistoryServiceactiviti的历史管理类
ManagerServiceactiviti的引擎管理类

简单介绍:

RepositoryService

是activiti的资源管理类,提供了管理和控制流程发布包和流程定义的操作。使用工作流建模工具设计的业务流程图需要使用此service将流程定义文件的内容部署到计算机。

除了部署流程定义以外还可以:查询引擎中的发布包和流程定义。

暂停或激活发布包,对应全部和特定流程定义。 暂停意味着它们不能再执行任何操作了,激活是对应的反向操作。获得多种资源,像是包含在发布包里的文件, 或引擎自动生成的流程图。

获得流程定义的pojo版本, 可以用来通过java解析流程,而不必通过xml。

RuntimeService
Activiti的流程运行管理类。可以从这个服务类中获取很多关于流程执行相关的信息

TaskService
Activiti的任务管理类。可以从这个类中获取任务的信息。

HistoryService
Activiti的历史管理类,可以查询历史信息,执行流程时,引擎会保存很多数据(根据配置),比如流程实例启动时间,任务的参与者, 完成任务的时间,每个流程实例的执行路径,等等。 这个服务主要通过查询功能来获得这些数据。

ManagementService
Activiti的引擎管理类,提供了对 Activiti 流程引擎的管理和维护功能,这些功能不在工作流驱动的应用程序中使用,主要用于 Activiti 系统的日常维护。
 

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值