Activiti——数据库、数据表的创建方式(springboot)

文章目录

  • 前言
  • 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 的方式,成功创建对应的表结构。

上一篇:ubuntu 20.04 设置国内镜像源(阿里源、清华源)-查询版本


下一篇:FFmpeg: 简易ijkplayer播放器实现--06封装打开和关闭stream