1. 初始化数据库
测试代码:
package com.demo.activiti7;
import org.activiti.engine.ProcessEngineConfiguration;
import org.activiti.engine.impl.cfg.ProcessEngineConfigurationImpl;
import org.activiti.engine.impl.db.DbSchemaCreate;
import org.activiti.engine.impl.history.HistoryLevel;
import org.junit.jupiter.api.Test;
public class DatabaseInitTest {
/**
* 初始化数据库(activiti 引擎)
*
* 在Activiti7 的文档中我们只需要配置了database-schema-update: true,在程序启动时,就会自动的帮我们更新或者创建表结构。但是在实施过程中发现程序启动后没有帮我创建表结构(mysql5.7)
*
* activiti:
* history-level: full
* db-history-used: true
* database-schema-update: true
* 解决方案:
* 在数据库连接地址后面加上
*
* nullCatalogMeansCurrent=true
* 就可以了。
*/
@Test
public void initMySql() {
// DbSchemaCreate
ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration()
.setDatabaseSchema("activiti7")
.setJdbcUrl(
"jdbc:mysql:///activiti_demo?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true")
.setDbHistoryUsed(true)
.setJdbcPassword("123456")
.setJdbcUsername("root")
.setJdbcDriver("com.mysql.cj.jdbc.Driver")
.setHistoryLevel(HistoryLevel.FULL)
.setDatabaseType("mysql")
.setDatabaseSchemaUpdate(ProcessEngineConfigurationImpl.DB_SCHEMA_UPDATE_CREATE)
.buildProcessEngine();
}
}
上述采取的是Java 代码方式,也可采取 act-cfg.xml 文件
其中代码可以看 mvnRep_home\org\activiti\activiti-engine\7.1.0.M6\activiti-engine-7.1.0.M6.jar
2. springboot + activiti7 + mybatis 整合
尴尬 mysql8 搞事情,activiti7 不能自动建立表:
activiti-7.1.0.M6 + mysql8.0.22 无法自动生成数据表,启动报错, activiti7 无法建立引擎 Bean 对象。
同时,报数据表不存在。
改到 mysql5.7 就可以了。
yaml
server:
servlet:
context-path: /v1/demo
port: 9091
spring:
jackson:
date-format: yyyy-MM-dd HH:mm:ss
time-zone: GMT+8
# activiti
activiti:
# 自动建表
database-schema: ACTIVITI7
#表示启动时检查数据库表,不存在则创建
database-schema-update: true
#表示哪种情况下使用历史表,这里配置为full表示全部记录历史,方便绘制流程图
history-level: full
#表示使用历史表,如果不配置,则工程启动后可以检查数据库,只建立了17张表,历史表没有建立,则流程图及运行节点无法展示
db-history-used: true
deployment-name: demo-mybatis-activiti7
datasource:
url: jdbc:mysql://localhost/activiti_demo?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8
username: root
password: 123456
# url: jdbc:mysql://192.168.0.213:30001/xh_activiti?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&useSSL=false
# username: root
# password: Platform#123
type: com.alibaba.druid.pool.DruidDataSource
druid:
# 下面为连接池的补充设置,应用到上面所有数据源中
# 初始化大小,最小,最大
initial-size: 5
min-idle: 5
max-active: 20
# 配置获取连接等待超时的时间
max-wait: 60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
time-between-eviction-runs-millis: 60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
min-evictable-idle-time-millis: 300000
# validation-query: SELECT 1 FROM DUAL
test-while-idle: true
test-on-borrow: false
test-on-return: false
# # 打开PSCache,并且指定每个连接上PSCache的大小
# pool-prepared-statements: true
# # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
# max-pool-prepared-statement-per-connection-size: 20
# filters: stat,wall
# use-global-data-source-stat: true
# # 通过connectProperties属性来打开mergeSql功能;慢SQL记录
# connect-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=2000
# # 配置监控服务器
# stat-view-servlet:
# login-username: admin
# login-password: admin
# reset-enable: false
# url-pattern: /druid/*
# # 添加IP白名单
# #allow:
# # 添加IP黑名单,当白名单和黑名单重复时,黑名单优先级更高
# #deny:
# web-stat-filter:
# # 添加过滤规则
# url-pattern: /*
# # 忽略过滤格式
# exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"
#liqubase是否开启
#liquibase:
# enabled: true
# changeLog: "classpath:/db/changelog/db.changelog-master.xml"
# checkChangeLogLocation: true
# #用于跟踪更改历史记录的表的名称。
# databaseChangeLogTable: DATABASECHANGELOG
# #用于跟踪Liquibase并发使用情况的表的名称。
# databaseChangeLogLockTable: DATABASECHANGELOGLOCK
# #是否先清空数据库
# dropFirst: false
# #是否应该在执行更新之前测试回滚。
# testRollbackOnUpdate: true
custom:
swagger:
enabled: true
mybatis:
mapper-locations: classpath*:mapper/**
configuration:
map-underscore-to-camel-case: true
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
logging:
level:
com.demo.activiti7.mapper: debug
pom
<?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">
<!--<parent>
<artifactId>my-activiti-demo</artifactId>
<groupId>my.activiti.demo.com</groupId>
<version>1.0-SNAPSHOT</version>
</parent>-->
<modelVersion>4.0.0</modelVersion>
<artifactId>mybatis-activiti7-single</artifactId>
<groupId>my.activiti.demo.com</groupId>
<version>1.0-SNAPSHOT</version>
<developers>
<developer>
<name>xiaohui</name>
<email>xuxiaohuimail@163.com</email>
<roles>
<role>developer</role>
</roles>
<timezone>+8</timezone>
</developer>
</developers>
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<mapstruct>1.3.0.Final</mapstruct>
<activiti.version>7.1.0.M6</activiti.version>
<spring-boot>2.1.0.RELEASE</spring-boot>
<fastjson>1.2.47</fastjson>
<commons-collections>3.2.2</commons-collections>
<commons-lang3>3.8.1</commons-lang3>
<swagger-annotations>1.5.16</swagger-annotations>
<springfox-swagger2>2.7.0</springfox-swagger2>
<druid.version>1.2.4</druid.version>
<mybatis-plus-boot-starter>3.1.0</mybatis-plus-boot-starter>
<feign-hystrix>9.5.0</feign-hystrix>
<lombok>1.16.20</lombok>
<!--<liquibase-core>3.5.3</liquibase-core>-->
<validation-api>2.0.1.Final</validation-api>
<hibernate-validator>6.0.15.Final</hibernate-validator>
<mybatis.version>3.5.6</mybatis.version>
<mysql.jdbc.version>8.0.15</mysql.jdbc.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.activiti.dependencies</groupId>
<artifactId>activiti-dependencies</artifactId>
<version>${activiti.version}</version>
<scope>import</scope>
<type>pom</type>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<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>
<version>RELEASE</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter</artifactId>
<version>${activiti.version}</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.jdbc.version}</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.4</version>
<exclusions>
<exclusion>
<artifactId>spring-boot-starter</artifactId>
<groupId>org.springframework.boot</groupId>
</exclusion>
<exclusion>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- Activiti生成流程图 -->
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-image-generator</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>${druid.version}</version>
</dependency>
<!-- utils -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${fastjson}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>${commons-collections}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok}</version>
</dependency>
<!-- data validation -->
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>${validation-api}</version>
</dependency>
<!--<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>${hibernate-validator}</version>
</dependency>-->
<!-- liquibase -->
<!--<dependency>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-core</artifactId>
<version>${liquibase-core}</version>
</dependency>-->
<!-- swagger -->
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-annotations</artifactId>
<version>${swagger-annotations}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>${springfox-swagger2}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>${springfox-swagger2}</version>
</dependency>
<!-- 数据库驱动相关 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>${druid.version}</version>
<scope>compile</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>8</source>
<target>8</target>
</configuration>
</plugin>
</plugins>
<finalName>mybatis-activiti7-single</finalName>
</build>
</project>
3. url 访问报错,出现 json 无法转化问题
{
"timestamp": "2021-02-05 17:00:36",
"status": 500,
"error": "Internal Server Error",
"message": "Could not write JSON: (was java.lang.NullPointerException); nested exception is com.fasterxml.jackson.databind.JsonMappingException: (was java.lang.NullPointerException) (through reference chain: org.activiti.engine.impl.persistence.entity.ExecutionEntityImpl[\"currentFlowElement\"])",
"path": "/v1/demo/ins"
}