Activiti7工作流引擎-环境搭建及创建数据库

第1章 什么是工作流
1.1工作流介绍
工作流(Workflow),就是通过计算机对业务流程自动化执行管理。它主要解决的是“使在多个参与者
之间按照某种预定义的规则自动进行传递文档、信息或任务的过程,从而实现某个预期的业务目标,
或者促使此目标的实现”。
1.2工作流系统
一个软件系统中具有工作流的功能,我们把它称为工作流系统,一个系统中工作流的功能是什
么?就是对系统的业务流程进行自动化管理,所以工作流是建立在业务流程的基础上,所以一个软
件的系统核心根本上还是系统的业务流程,工作流只是协助进行业务流程管理。即使没有工作流业
务系统也可以开发运行,只不过有了工作流可以更好的管理业务流程,提高系统的可扩展性。
1.2.1 适用行业
消费品行业,制造业,电信服务业,银证险等金融服务业,物流服务业,物业服务业,物业管理,
大中型进出口贸易公司,政府事业机构,研究院所及教育服务业等,特别是大的跨国企业和集团公
司。
1.2.2 具体应用

  1. 关键业务流程:订单、报价处理、合同审核、客户电话处理、供应链管理等
  2. 行政管理类:出差申请、加班申请、请假申请、用车申请、各种办公用品申请、购买申请、日报
    周报等凡是原来手工流转处理的行政表单。
  3. 人事管理类:员工培训安排、绩效考评、职位变动处理、员工档案信息管理等。
  4. 财务相关类:付款请求、应收款处理、日常报销处理、出差报销、预算和计划申请等。
  5. 客户服务类:客户信息管理、客户投诉、请求处理、售后服务管理等。
  6. 特殊服务类:ISO 系列对应流程、质量管理对应流程、产品数据信息管理、贸易公司报关处理、
    物流公司货物跟踪处理等各种通过表单逐步手工流转完成的任务均可应用工作流软件自动规范
    地实施。
    1.3 工作流实现方式
    在没有专门的工作流引擎之前,我们之前为了实现流程控制,通常的做法就是采用状态字段的值来
    跟踪流程的变化情况。这样不用角色的用户,通过状态字段的取值来决定记录是否显示。
    针对有权限可以查看的记录,当前用户根据自己的角色来决定审批是否合格的操作。如果合格将状
    态字段设置一个值,来代表合格;当然如果不合格也需要设置一个值来代表不合格的情况。
    这是一种最为原始的方式。通过状态字段虽然做到了流程控制,但是当我们的流程发生变更的时候,
    这种方式所编写的代码也要进行调整。
    那么有没有专业的方式来实现工作流的管理呢?并且可以做到业务流程变化之后,我们的程序可以
    不用改变,如果可以实现这样的效果,那么我们的业务系统的适应能力就得到了极大提升。
    1.4 工作流实现原理分析
    如何可以做到我们在业务流程发生变更后,我们的业务系统代码可以不发生改变?此时我们就来分
    析一下原理。
    具体分析过程如下图所示:
    在这里插入图片描述
    第2章 什么是Activiti7
    2.1Activiti 介绍
    Alfresco 软件在 2010 年 5 月 17 日宣布 Activiti 业务流程管理(BPM)开源项目的正式启动,其
    首席架构师由业务流程管理 BPM 的专家 Tom Baeyens 担任,Tom Baeyens 就是原来 jbpm 的架构师,
    而 jbpm 是一个非常有名的工作流引擎,当然 activiti 也是一个工作流引擎。
    Activiti 是一个工作流引擎, activiti 可以将业务系统中复杂的业务流程抽取出来,使用专门的
    建模语言(BPMN2.0)进行定义,业务系统按照预先定义的流程进行执行,实现了业务系统的业务
    流程由 activiti 进行管理,减少业务系统由于流程变更进行系统升级改造的工作量,从而提高系统的
    健壮性,同时也减少了系统开发维护成本。
    官方网站:https://www.activiti.org/
    在这里插入图片描述
    经历的版本:
    在这里插入图片描述
    2.1.1 BPM
    BPM(Business Process Management),即业务流程管理,是一种以规范化的构造端到端的卓越
    业务流程为中心,以持续的提高组织业务绩效为目的系统化方法,常见商业管理教育如 EMBA、MBA
    等均将 BPM 包含在内。
    企业流程管理主要是对企业内部改革,改变企业职能管理机构重叠、中间层次多、流程不闭环
    等,做到机构不重叠、业务不重复,达到缩短流程周期、节约运作资本、提高企业效益的作用。
    传智播客——专注于 Java、.Net 和 Php、网页平面设计工程师的培训
    比较下边的两个人事加薪流程哪个效率更高?
    流程一:
    在这里插入图片描述

流程二:
在这里插入图片描述

上边两个流程的区别在于第二个流程在执行时,如果本次加薪金额在一万元以内不再由总经理审批
将比第一个流程缩短流程周期,从而提交效率。
再比较下边的例子,哪个效率更高?
流程一:
在这里插入图片描述
流程二:
在这里插入图片描述
上边两个流程的区别在于第二个流程将交费和取药放在一起进行,这样导致的结果是此窗口的工作
人员必须具备财务、药学专业知识,岗位强度加大,人员培训难度加大从而导致人员不易扩展,工
作效率低下。
2.1.2 BPM 软件
BPM 软件就是根据企业中业务环境的变化,推进人与人之间、人与系统之间以及系统与系统之
间的整合及调整的经营方法与解决方案的 IT 工具。 通常以 Internet 方式实现信息传递、数据同步、
业务监控和企业业务流程的持续升级优化,从而实现跨应用、跨部门、跨合作伙伴与客户的企业运
作。通过 BPM 软件对企业内部及外部的业务流程的整个生命周期进行建模、自动化、管理监控和优
化,使企业成本降低,利润得以大幅提升。
BPM 软件在企业中应用领域广泛,凡是有业务流程的地方都可以 BPM 软件进行管理,比如企
业人事办公管理、采购流程管理、公文审批流程管理、财务管理等。
2.1.3 BPMN
BPMN(Business Process Model And Notation)- 业务流程模型和符号 是由 BPMI(Business
Process 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 图形的例子:
首先当事人发起一个请假单;
其次他所在部门的经理对请假单进行审核;
然后人事经理进行复核并进行备案;
最后请假流程结束。
在这里插入图片描述
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>

2.2Activit 如何使用

  1. 部署 activiti
    Activiti 是一个工作流引擎(其实就是一堆 jar 包 API),业务系统使用 activiti 来对系统的业务流
    程进行自动化管理,为了方便业务系统访问(操作)activiti 的接口或功能,通常将 activiti 环境与业务
    系统的环境集成在一起。

  2. 流程定义
    使用 activiti 流程建模工具(activity-designer)定义业务流程(.bpmn 文件) 。
    .bpmn 文件就是业务流程定义文件,通过 xml 定义业务流程。
    如果使用其它公司开发的工作作引擎一般都提供了可视化的建模工具(Process Designer)用于生
    成流程定义文件,建模工具操作直观,一般都支持图形化拖拽方式、多窗口的用户界面、丰富的过
    程图形元素、过程元素拷贝、粘贴、删除等功能。

  3. 流程定义部署
    向 activiti 部署业务流程定义(.bpmn 文件)。
    使用 activiti 提供的 api 向 activiti 中部署.bpmn 文件(一般情况还需要一块儿部署业务流程的图
    片.png)

  4. 启动一个流程实例(ProcessInstance)
    启动一个流程实例表示开始一次业务流程的运行,比如员工请假流程部署完成,如果张三要请
    假就可以启动一个流程实例,如果李四要请假也启动一个流程实例,两个流程的执行互相不影
    响,就好比定义一个 java 类,实例化两个对象一样,部署的流程就好比 java 类,启动一个流程
    实例就好比 new 一个 java 对象。

  5. 用户查询待办任务(Task)
    因为现在系统的业务流程已经交给 activiti 管理,通过 activiti 就可以查询当前流程执行到哪了,
    当前用户需要办理什么任务了,这些 activiti帮我们管理了,而不像上边需要我们在 sql语句中的where
    条件中指定当前查询的状态值是多少。

  6. 用户办理任务
    用户查询待办任务后,就可以办理某个任务,如果这个任务办理完成还需要其它用户办理,比如采
    购单创建后由部门经理审核,这个过程也是由 activiti 帮我们完成了,不需要我们在代码中硬编码指
    定下一个任务办理人了。

  7. 流程结束
    当任务办理完成没有下一个任务/结点了,这个流程实例就完成了。
    第3章 环境准备
    3.1三个环境
    第一个环境:没有加入工作流 SaaS-IHRM 系统
    作用:主要是为 activiti 工作流引擎的引入提供场景
    第二个环境:activiti 测试环境
    作用:用于测试 activiti 的 api,提供各种 service 接口。
    需要创建一个数据库:
    仅仅有 activiti 的数据表

第三个环境:activiti 应用环境,加入工作流的 SaaS-IHRM 系统
需要创建一个数据库:
包括 activiti 的数据表和业务表(SaaS-IHRM 系统的表)
3.2开发环境
3.2.1 Java 环境
Jdk1.8 或以上版本。
3.2.2 数据库
Mysql 5 及以上的版本
本教程采用 5.5 版本
3.2.3 Web 容器
本项目采用的是 Tomcat8.5
3.2.4 开发工具
Mysql 客户端连接工具,Sqlyog 或其它
文本编辑器 EditPlus 或其它
Java 开发工具:IDEA 或 Eclipse 工具
注意:activiti 的流程定义工具插件可以安装在 IDEA 下,也可以安装在 Eclipse 工具下。
3.3Activiti 环境
Activiti7.0.0.Beta1
默认支持 spring5

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

<dependencyManagement>
 <dependencies>
 <dependency>
 <groupId>org.activiti</groupId>
 <artifactId>activiti-dependencies</artifactId>
 <version>7.0.0.Beta1</version>
 <scope>import</scope>
 <type>pom</type>
 </dependency>
 </dependencies>
</dependencyManagement>
  1. Database:
    activiti 运行需要有数据库的支持,支持的数据库有:h2, mysql, oracle, postgres, mssql, db2
    等,该目录存放 activiti 的建表脚本。
  2. Docs
    Activiti 的帮助文档。
  3. Wars
    官方自带的示例工程。
    3.3.2 Activiti Designer 流程设计器(Eclipse 工具)
    本教程使用 Activiti –Designer-eclipse-plugin(activiti 流程设计器插件)完成流程的制作。
    下面介绍了 activiti designer 设计器插件的安装方式,本教程使用的插件安装方式详细参考“activiti
    开发环境配置.docx”文档的“Eclipse 插件安装”章节。
    3.3.2.1 Eclispe 工具下插件安装方式 1
    参数文档开发工具目录下的“activiti 开发环境配置.docx”中“eclipse 插件安装”,其中包括了 Activiti
    插件。
    3.3.2.2 Eclispe 工具下插件安装方式 2
    网络在线安装:
  4. 打开 Help -> Install New Software. 在如下面板中:
    在这里插入图片描述
  5. 在如下 Install 界面板中,点击 Add 按钮:
    在这里插入图片描述
    配置新装插件的地址和名称
  6. 然后填入下列字段
Name: Activiti BPMN 2.0 designe
Location: http://activiti.org/designer/update/

在这里插入图片描述

  1. 回到 Install 界面,在面板正中列表中把所有展示出来的项目都勾上:
    在这里插入图片描述
  2. 点击复选框
    在 Detail 部分记得选中 “Contact all updates sites…” , 因为它会检查所有当前安装所需
    要的插件并可以被 Eclipse 下载.
  3. 安装完以后,点击新建工程 new->Other…打开面板,如果看到下图内容:
    在这里插入图片描述
    说明安装成功了。
    3.3.2.3 补充说明
    打开菜单 Windows->Preferences->Activiti->Save 下流程图片的生成方式:
    在这里插入图片描述
    虽然流程引擎在单独部署 bpmn 文件时会自动生成图片,但在实际开发过程中,自动生成的图
    片会导致和 BPMN 中的坐标有出入,在实际项目中展示流程当前位置图会有问题。
    所在完成以上配置后,会由我们自己来管理流程图片。在发布流程时把流程规则文件和流程图片一
    起上传就行了。
    北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
    传智播客——专注于 Java、.Net 和 Php、网页平面设计工程师的培训
    3.3.3 Activiti Designer 流程设计器(IDEA 工具) 在 IDEA 的 File 菜单中找到子菜单”Settings”,后面我们再选择左侧的“plugins”菜单,如下图所示:
    在这里插入图片描述
    此时我们就可以搜索到 actiBPM 插件,它就是 Activiti Designer 的 IDEA 版本。
    安装好后,页面如下:
    在这里插入图片描述
    3.3.4 Activiti 支持的数据库
    Activiti 的运行需要数据库支撑,需要安装 activiti 数据库,支持如下版本:
    在这里插入图片描述
    3.3.5创建 mysql 数据库
    本教程使用 mysql 数据库。
    创建 mysql 数据库 activiti(名字任意):
    CREATE DATABASE activiti DEFAULT CHARACTER SET utf8;
    3.3.6创建表方式
    通过运行 java 程序创建表。
    3.3.6.1 创建 java 工程
    使用 eclipse 或 idea 创建 maven 的 java 工程。
    3.3.6.2 加入 maven 依赖的坐标(jar 包)
    首先需要在 java 工程中加入 ProcessEngine 所需要的 jar 包,包括:
  4. activiti-engine-7.0.0.beta1.jar
  5. activiti 依赖的 jar 包:mybatis、alf4j、log4j 等
  6. activiti 依赖的 spring 包
  7. 数据库驱动
  8. 第三方数据连接池 dbcp
  9. 单元测试 Junit-4.12.jar
    我们使用 maven 来实现项目的构建,所以应当导入这些 jar 所对应的坐标到 pom.xml 文件中。
<properties>
 <slf4j.version>1.6.6</slf4j.version>
 <log4j.version>1.2.12</log4j.version>
</properties> <dependencies>
 <dependency>
 <groupId>org.activiti</groupId>
 <artifactId>activiti-engine</artifactId>
 <version>7.0.0.Beta1</version>
 </dependency>
 <dependency>
 <groupId>org.activiti</groupId>
 <artifactId>activiti-spring</artifactId>
 <version>7.0.0.Beta1</version>
 </dependency>
 <dependency>
 <groupId>org.activiti</groupId>
 <artifactId>activiti-bpmn-model</artifactId>
 <version>7.0.0.Beta1</version>
 </dependency>
 <dependency>
 <groupId>org.activiti</groupId>
 <artifactId>activiti-bpmn-converter</artifactId>
 <version>7.0.0.Beta1</version>
 </dependency>
 <dependency>
 <groupId>org.activiti</groupId>
 <artifactId>activiti-json-converter</artifactId>
 <version>7.0.0.Beta1</version>
 </dependency>

 <dependency>
 <groupId>org.activiti</groupId>
 <artifactId>activiti-bpmn-layout</artifactId>
 <version>7.0.0.Beta1</version>
 </dependency>
 <dependency>
 <groupId>org.activiti.cloud</groupId>
 <artifactId>activiti-cloud-services-api</artifactId>
 <version>7.0.0.Beta1</version>
 </dependency>
 <dependency>
 <groupId>mysql</groupId>
 <artifactId>mysql-connector-java</artifactId>
 <version>5.1.40</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>
 <!-- log end -->
 <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>
</dependencies>

3.3.6.3 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=d:\axis.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

3.3.6.4 activiti.cfg.xml
在 classpath 下创建 activiti.cgf.xml 文件:

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

在 activiti.cfg.xml 中配置数据源和 processEngineConfiguration

  1. 数据源
<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/
itcast0711activiti" />
<property name="username" value="root" />
<property name="password" value="root" />
<property name=" maxActive" value="3" />
<property name="maxIdle" value="1" />
</bean>
  1. processEngineConfiguration
    processEngineConfiguration 用来创建 ProcessEngine,在创建 ProcessEngine 时会执行数据库的操作。
<bean id="processEngineConfiguration"
class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
<!-- 数据源 --> <property name="dataSource" ref="dataSource" />
<!-- activiti数据库表处理策略 --> <property name="databaseSchemaUpdate" value="true"/>
</bean>

关于 processEngineConfiguration 中的 databaseSchemaUpdate 参数,通过此参数设计 activiti
数据表的处理策略,参数如下:
false(默认):检查数据库表的版本和依赖库的版本, 如果版本不匹配就抛出异常。
true: 构建流程引擎时,执行检查,如果需要就执行更新。 如果表不存在,就创建。
create-drop: 构建流程引擎时创建数据库表, 关闭流程引擎时删除这些表。
drop-create:先删除表再创建表。
create: 构建流程引擎时创建数据库表, 关闭流程引擎时不删除这些表。
注意:在 activiti.cfg.xml 配置文件中的 dataSource 和 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://localhost:3306/itcast0711activiti"/>
 <property name="jdbcUsername" value="root"/>
 <property name="jdbcPassword" value="root"/>
 <property name="databaseSchemaUpdate" value="true"/>
</bean>

3.3.6.5 编写程序
创建 ProcessEngineConfiguration,通过 ProcessEngineConfiguration 创建 ProcessEngine,在创建
ProcessEngine 时会自动创建数据库。

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

说明:
1、运行以上程序段即可完成 activiti 数据库创建,通过改变 activiti.cfg.xml 中 databaseSchemaUpdate 参数的值执行不同的数据表处理策略。
2、 上 边 的 方法 createProcessEngineConfigurationFromResource 在执行时在
activiti.cfg.xml 中找固定的名称 processEngineConfiguration
也可以使用重载方法调用,这时可以不用限定 processEngineConfiguration 名称
在这里插入图片描述
此时我们查看数据库,创建了 25 张表,结果如下:
在这里插入图片描述
3.3.7 数据库表的命名规则
Activiti 的表都以 ACT_开头。 第二部分是表示表的用途的两个字母标识。 用途也和服务的 API 对
应。
 ACT_RE_: 'RE’表示 repository。 这个前缀的表包含了流程定义和流程静态资源 (图片,
规则,等等)。
 ACT_RU_
: 'RU’表示 runtime。 这些运行时的表,包含流程实例,任务,变量,异步任务,
等运行中的数据。 Activiti 只在流程实例执行过程中保存这些数据, 在流程结束时就会删
除这些记录。 这样运行时表可以一直很小速度很快。
 ACT_HI_: 'HI’表示 history。 这些表包含历史数据,比如历史流程实例, 变量,任务等
等。
 ACT_GE_
: GE 表示 general。通用数据, 用于不同场景下。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

科学熊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值