本文其实主要是观看教程的一些个人笔记。主要介绍基础知识和一些使用 activiti 之前要做的准备工作
activiti 是目前非常流行的工作流引擎,用于实现项目中工作流的自动化控制。
没有使用工作流引擎的项目,一般使用状态码来标识区分各流程。这样开发的话,如果后期工作流程发生变化,加一个流程步骤或减少一个流程步骤,都要重新修改代码;这样就不太好扩展、维护。
如果使用了工作流引擎,这些问题就几乎不存在了,可以省了很多事。
BPM (Business Process Management) 业务流程管理
BPMN (Business Process Model And Notation) 业务流程模型和符号
该工作流引擎本身有25张表,有比较大的成本,适用于规模比较大的项目
1)画好工作流程图——实际上是一个xml文件
2)activiti 将流程图中每个节点的数据读取到表中
3)读取表中的第一条记录,处理后删除
1)使用BPMN设计业务流程图
2)部署业务流程到Activiti
3)启动流程实例
4)查询待办业务
5)处理待办业务
6)结束流程
1)在线安装(要)
settings >> plugins 搜索 actiBPM。
2)离线下载安装包(推荐)
https://plugins.jetbrains.com/plugin/7429-actibpm
1)在线安装
help >> install new software
Name: 自定义一个名称(Activiti BPMN 2.0 designer)
Location: 输入网址 https://www.activiti.org/designer/update/
2)离线下载插件包(推荐)
把插件包中的 features 和 plugins 中的文件分别全部复制到 eclipse 安装目录中的 features 和 plugins
1)创建 maven 项目,引入依赖
<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.0modelVersion>
<groupId>org.examplegroupId>
<artifactId>activitiDemoartifactId>
<version>1.0-SNAPSHOTversion>
<dependencies>
<dependency>
<groupId>org.activitigroupId>
<artifactId>activiti-engineartifactId>
<version>7.1.0.M6version>
dependency>
<dependency>
<groupId>org.activitigroupId>
<artifactId>activiti-springartifactId>
<version>7.1.0.M6version>
dependency>
<dependency>
<groupId>org.activitigroupId>
<artifactId>activiti-bpmn-modelartifactId>
<version>7.1.0.M6version>
dependency>
<dependency>
<groupId>org.activitigroupId>
<artifactId>activiti-bpmn-converterartifactId>
<version>7.1.0.M6version>
dependency>
<dependency>
<groupId>org.activitigroupId>
<artifactId>activiti-json-converterartifactId>
<version>7.1.0.M6version>
dependency>
<dependency>
<groupId>org.activitigroupId>
<artifactId>activiti-bpmn-layoutartifactId>
<version>7.1.0.M6version>
dependency>
<dependency>
<groupId>org.activiti.cloudgroupId>
<artifactId>activiti-cloud-services-apiartifactId>
<version>7.0.0.Beta1version>
dependency>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<version>8.0.19version>
dependency>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.12version>
<scope>testscope>
dependency>
<dependency>
<groupId>log4jgroupId>
<artifactId>log4jartifactId>
<version>1.2.17version>
dependency>
<dependency>
<groupId>org.slf4jgroupId>
<artifactId>slf4j-apiartifactId>
<version>1.7.26version>
dependency>
<dependency>
<groupId>org.slf4jgroupId>
<artifactId>slf4j-log4j12artifactId>
<version>1.7.26version>
dependency>
<dependency>
<groupId>org.mybatisgroupId>
<artifactId>mybatisartifactId>
<version>3.5.3version>
dependency>
<dependency>
<groupId>com.alibabagroupId>
<artifactId>druidartifactId>
<version>1.1.16version>
dependency>
dependencies>
<repositories>
<repository>
<id>alfrescoid>
<name>activiti releasesname>
<url>https://artifacts.alfresco.com/nexus/content/repositories/activiti-releases/url>
<releases>
<enabled>trueenabled>
releases>
repository>
repositories>
project>
2)配置文件
log4j 配置文件:
log4j.rootCategory=debug, CONSOLE, LOGFILE
log4j.logger.ort.apache.axis.enterprise=FATAL, CONSOLE
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
log4j.appender.LOGFILE=org.apache.log4j.FileAppender
log4j.appender.LOGFILE.File=g:\\temp\\activitiDemo.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
activiti 默认配置文件:activiti.cfg.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/context 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="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test_activiti?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8&allowPublicKeyRetrieval=true"/>
<property name="username" value="root"/>
<property name="password" value="godXiao"/>
bean>
<bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
<property name="dataSource" ref="dataSource"/>
<property name="databaseSchemaUpdate" value="true"/>
bean>
beans>
需要注意的是,在xml配置文件中,url中的 & 符号需要转义成 &
3)测试类
public class ActivitiTest {
//测试 activiti 的25张表的生成
@Test
public void createTable() {
//1、创建 ProcessEngineConfiguration 对象
//ProcessEngineConfiguration configuration = ProcessEngineConfiguration
// .createProcessEngineConfigurationFromResource("activiti.cfg.xml");
//后面的参数是配置文件 bean 的id,默认是 processEngineConfiguration,可以自定义其他名称
ProcessEngineConfiguration configuration = ProcessEngineConfiguration
.createProcessEngineConfigurationFromResource("activiti.cfg.xml","processEngineConfiguration");
//2、创建 ProcessEngine 对象
ProcessEngine processEngine = configuration.buildProcessEngine();
//然后就可以通过 processEngine 获取到不同的 service 接口去操作那 25 张表了
System.out.println(processEngine);
}
@Test
public void createTableDefault() {
//前提:1、activiti 的配置文件是 activiti.cfg.xml;2、activiti 的配置文件中 bean 的 id 必须是 processEngineConfiguration
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
System.out.println(processEngine);
}
}
首先创建 ProcessEngineConfiguration对象,通过 ProcessEngineConfiguration对象创建 ProcessEngine 对象,在创建 ProcessEngine 对象时会自动创建表结构
执行这个测试方法,可以看到控制台有很多创建表结构的 sql 语句
查看数据库 test_activiti,发现 25 张表创建成功
表名 | 作用描述 |
---|---|
act_re_* | “re”表示 repository 。这些表包含了流程定义和流程静态资源(图片、规则等) |
act_ru_* | “ru”表示 runtime 。这些运行时的表,包含流程的实例、任务、变量、异步任务等运行中的数据。Activiti 只在流程实例执行过程中保存这些数据,在流程结束时就会删除这些记录。这样运行时表可以一直很小,速度很快 |
act_hi_* | “hi”表示 history 。这些表包含历史数据,比如历史流程实例、变量、任务等 |
act_ge_* | “ge”表示 general 。通用数据,用于不同的场景下 |
接口 | 作用 |
---|---|
RepositoryService | activiti 的资源管理类 |
RuntimeService | activiti 的流程运行管理类 |
TaskService | activiti 的任务管理类 |
HistoryService | activiti 的历史管理类 |
ManagerService | activiti 的引擎管理类 |
注意:在新版本中,IdentityService, FormService 两个 Service 都被删除