文章目录
- 前言
- Activiti 支持哪些数据库
- MySQL创建activiti表
- 1、创建数据库
- 2、版本说明
- 3、创建maven工程,导入依赖与配置
- 4、配置文件 applicaion.yml
- 4.1、activiti数据库表生成时的策略说明
- 5、编写配置类 ActivitiSpringIdentityAutoConfiguration
- 6、配置springboot启动类
- 配置案例结构
- 数据库表展示
- 数据表简述
- 结语
前言
activity 工作流是一款目前市面上用途很广泛的流程处理框架,本篇博客重点说明关于activity工作流数据库的配置与说明。
Activiti 支持哪些数据库
Activiti的运行需要数据库支撑,需要安装 Activiti数据库,支持如下版本:
数据库类型 | 测试版本 | JDBC URL 实例 | 备注 |
---|---|---|---|
h2 | 1.3.168 | jdbc:h2:tcp://localhost/数据库名 | activity官方默认使用数据库 |
mysql | 5.1.21 | jdbc:mysql://localhost:3306/数据库名?autoReconnect=true | 使用 mysql-connector-java驱动测试 |
oracle | 11.2.0.1.0 | jdbc:oracle:thin:@localhost:1521:xe | |
postgres | 8.1 | jdbc:postgresql://localhost:5432/数据库名 | |
db2 | DB2 10.1 usingdb2jcc4 | jdbc:db2://localhost:50000/数据库名 | |
mssql | 2008 usingsqljdbc4 | jdbc:sqlserver://localhost:1433/数据库名 |
MySQL创建activiti表
activiti
官方并没有给出具体的床架数据库与数据库表的脚本。但在源代码中是可以发现程序运行时会自动创建。
本次测试环境使用MySQL5.7 实现。
1、创建数据库
CREATE DATABASE Activiti DEFAULT CHARACTER SET utf8mb4;
2、版本说明
- idea 2020版本及以上
- mysql 5.7.0
- Activiti-engine-7.0.0.beta1.jar
- Activiti依赖的 jar 包: mybatis、 alf4j、 log4j 等
- Activiti依赖的 spring 包
- 数据库驱动
- 第三方数据连接池 dbcp
3、创建maven工程,导入依赖与配置
使用idea,创建maven项目的springboot
工程。引入如下依赖信息。
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.69</version>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.7.5</version>
</dependency>
<!-- Mysql依赖 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.23</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!-- MybatisPlus依赖 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
<version>3.4.0</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.0</version>
</dependency>
<!-- 数据库连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.21</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.21</version>
</dependency>
<!-- Activiti7依赖 -->
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter</artifactId>
<version>7.1.0.M6</version>
</dependency>
<dependency>
<groupId>org.activiti.dependencies</groupId>
<artifactId>activiti-dependencies</artifactId>
<version>7.1.0.M6</version>
<type>pom</type>
</dependency>
</dependencies>
【扩展】
如果是 maven 工程的 spring 项目,在引入对应依赖时,可能出现加载不了的情况。
引入对应的pom后,可能会出现Could not find artifact org.Activiti:Activiti-engine:pom:7.0.0.Beta1 in nexus-aliyun (http://maven.aliyun.com/nexus/content/groups/public)
的报错问题。
原因是阿里Maven仓库中也的确没有对应的版本管理。此时则需要下载对应的jar包,并导入本地maven仓库中。如下所示:
maven仓库下载对应的jar包,再jar包文件夹中执行下面的命令。
mvn install:install-file -Dfile="activiti-bpmn-converter-7.0.0.Beta1.jar" -DgroupId="org.Activiti" -DartifactId="Activiti-bpmn-converter" -Dversion="7.0.0.Beta1" -Dpackaging=jar
mvn install:install-file -Dfile="activiti-bpmn-layout-7.0.0.Beta1.jar" -DgroupId="org.Activiti" -DartifactId="Activiti-bpmn-layout" -Dversion="7.0.0.Beta1" -Dpackaging=jar
mvn install:install-file -Dfile="activiti-bpmn-model-7.0.0.Beta1.jar" -DgroupId="org.Activiti" -DartifactId="Activiti-bpmn-model" -Dversion="7.0.0.Beta1" -Dpackaging=jar
mvn install:install-file -Dfile="activiti-cloud-services-api-7.0.0.Beta1.jar" -DgroupId="org.Activiti.cloud" -DartifactId="Activiti-cloud-services-api" -Dversion="7.0.0.Beta1" -Dpackaging=jar
mvn install:install-file -Dfile="activiti-engine-7.0.0.Beta1.jar" -DgroupId="org.Activiti" -DartifactId="Activiti-engine" -Dversion="7.0.0.Beta1" -Dpackaging=jar
mvn install:install-file -Dfile="activiti-json-converter-7.0.0.Beta1.jar" -DgroupId="org.Activiti" -DartifactId="Activiti-json-converter" -Dversion="7.0.0.Beta1" -Dpackaging=jar
mvn install:install-file -Dfile="activiti-spring-7.0.0.Beta1.jar" -DgroupId="org.Activiti" -DartifactId="Activiti-spring" -Dversion="7.0.0.Beta1" -Dpackaging=jar
【注意】如果出现 mvn install
报错,报错信息如下:
The goal you specified requires a project to execute but there is no POM in this direct
问题根源:
使用
mvn install:install-file
时,后面的名称路径等 未进行"xxx"
引号包含。
4、配置文件 applicaion.yml
主要配置数据库的连接信息,部分activiti的信息。
server:
port: 8600
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
druid:
url: jdbc:mysql://xxxxx:3306/activiti?serverTimezone=Asia/Shanghai&characterEncoding=utf-8&nullCatalogMeansCurrent=true
username: root
password: root
driver-class-name: com.mysql.jdbc.Driver
# activiti7配置
activiti:
# 自动部署验证设置:true-开启(默认)、false-关闭
check-process-definitions: false
# 保存历史数据
history-level: full
# 检测历史表是否存在
db-history-used: true
# 关闭自动部署
deployment-mode: never-fail
database-schema-update: true
# 解决频繁查询SQL问题
async-executor-activate: false
4.1、activiti数据库表生成时的策略说明
在配置中,数据源的配置上有一个配置点database-schema-update
。它具备以下几种取值方式。
取值 | 说明 |
---|---|
true | 如果数据库中已经存在相应的表,那么直接使用; 如果不存在,则会自动创建。 |
false(默认) | 检查数据库表的版本和依赖库的版本,版本不匹配则抛出异常 |
create-drop | 构建流程引擎时创建数据库表, 关闭流程引擎时删除这些表。 |
drop-create | 任何时候都是先删除表再创建表。 |
create | 构建流程引擎时创建数据库表, 关闭流程引擎时不删除这些表。 |
5、编写配置类 ActivitiSpringIdentityAutoConfiguration
项目在启动运行时,会出现一个对应报错信息,此处必须配置对应的用户组
,避免报错。
package com.bugs.config;
import org.activiti.api.runtime.shared.identity.UserGroupManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.ArrayList;
import java.util.List;
@Configuration
public class ActivitiSpringIdentityAutoConfiguration {
@Bean
public UserGroupManager userGroupManager() {
return new UserGroupManager() {
@Override
public List<String> getUserGroups(String s) {
return new ArrayList<>();
}
@Override
public List<String> getUserRoles(String s) {
return null;
}
@Override
public List<String> getGroups() {
return null;
}
@Override
public List<String> getUsers() {
return null;
}
};
}
}
6、配置springboot启动类
创建一个springboot项目的启动类,运行就会创建对应的数据表信息。
package com.bugs;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class,args);
}
}
启动项目,在控制台中可以发现调用pom依赖中的对应sql进行了表的创建。
配置案例结构
数据库表展示
数据表简述
Activiti 数据表的命名规则很简单。
所有表名称的命名,都是采取_
的方式进行分割区分。
-
act
开头,表示activiti
使用到的表,能够在业务表和工作流表在一个库中时,得到很好的区分。 - ACT_GE_*:
GE
表示 general。 通用数据, 用于不同场景下。 - ACT_HI_*:
HI
表示 history。 这些表包含历史数据,比如历史流程实例, 变量,任务等。 - ACT_RE_*:
RE
表示 repository。 这个前缀的表包含了流程定义的内容和所需要的一些静态资源 (图片,规则,等)。 - ACT_RU_*:
RU
表示 runtime。 这些运行时的表,回保存流程实例,任务,变量,异步任务,或运行时所需要的一些数据。 Activiti只在流程实例执行过程中
保存这些数据, 在流程结束时就会删除这些记录
。 这样运行时表可以一直很小速度很快。
表分类 | 表名 | 说明 |
---|---|---|
一般数据(2) | ||
[ACT_GE_BYTEARRAY] | 通用的流程定义和流程资源 | |
[ACT_GE_PROPERTY] | 系统相关属性 | |
流程历史记录(8) | ||
[ACT_HI_ACTINST] | 历史的流程实例 | |
[ACT_HI_ATTACHMENT] | 历史的流程附件 | |
[ACT_HI_COMMENT] | 历史的说明性信息 | |
[ACT_HI_DETAIL] | 历史的流程运行中的细节信息 | |
[ACT_HI_IDENTITYLINK] | 历史的流程运行过程中用户关系 | |
[ACT_HI_PROCINST] | 历史的流程实例 | |
[ACT_HI_TASKINST] | 历史的任务实例 | |
[ACT_HI_VARINST] | 历史的流程运行中的变量信息 | |
流程定义表(3) | ||
[ACT_RE_DEPLOYMENT] | 部署单元信息 | |
[ACT_RE_MODEL] | 模型信息 | |
[ACT_RE_PROCDEF] | 已部署的流程定义 | |
运行实例表(6) | ||
[ACT_RU_EVENT_SUBSCR] | 运行时事件 | |
[ACT_RU_EXECUTION] | 运行时流程执行实例 | |
[ACT_RU_IDENTITYLINK] | 运行时用户关系信息,存储任务节点与参与者的相关信息 | |
[ACT_RU_JOB] | 运行时作业 | |
[ACT_RU_TASK] | 运行时任务 | |
[ACT_RU_VARIABLE] | 运行时变量表 |
结语
最开始这篇文章采取的是Spring
项目配置的方式,但在最后一步创建表时,总会出现各种依赖不全,或者对应依赖中无指定class的玄学问题。
换成springboot 的方式,成功创建对应的表结构。