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* 就可以了。*/@Testpublic void initMySql() {// DbSchemaCreateProcessEngineConfiguration.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/demoport: 9091spring:jackson:date-format: yyyy-MM-dd HH:mm:sstime-zone: GMT+8# activitiactiviti:# 自动建表database-schema: ACTIVITI7#表示启动时检查数据库表,不存在则创建database-schema-update: true#表示哪种情况下使用历史表,这里配置为full表示全部记录历史,方便绘制流程图history-level: full#表示使用历史表,如果不配置,则工程启动后可以检查数据库,只建立了17张表,历史表没有建立,则流程图及运行节点无法展示db-history-used: truedeployment-name: demo-mybatis-activiti7datasource:url: jdbc:mysql://localhost/activiti_demo?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8username: rootpassword: 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#123type: com.alibaba.druid.pool.DruidDataSourcedruid:# 下面为连接池的补充设置,应用到上面所有数据源中# 初始化大小,最小,最大initial-size: 5min-idle: 5max-active: 20# 配置获取连接等待超时的时间max-wait: 60000# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒time-between-eviction-runs-millis: 60000# 配置一个连接在池中最小生存的时间,单位是毫秒min-evictable-idle-time-millis: 300000# validation-query: SELECT 1 FROM DUALtest-while-idle: truetest-on-borrow: falsetest-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: truecustom:swagger:enabled: truemybatis:mapper-locations: classpath*:mapper/**configuration:map-underscore-to-camel-case: truelog-impl: org.apache.ibatis.logging.stdout.StdOutImpllogging: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"}
