1. 初始化数据库

测试代码:

  1. package com.demo.activiti7;
  2. import org.activiti.engine.ProcessEngineConfiguration;
  3. import org.activiti.engine.impl.cfg.ProcessEngineConfigurationImpl;
  4. import org.activiti.engine.impl.db.DbSchemaCreate;
  5. import org.activiti.engine.impl.history.HistoryLevel;
  6. import org.junit.jupiter.api.Test;
  7. public class DatabaseInitTest {
  8. /**
  9. * 初始化数据库(activiti 引擎)
  10. *
  11. * 在Activiti7 的文档中我们只需要配置了database-schema-update: true,在程序启动时,就会自动的帮我们更新或者创建表结构。但是在实施过程中发现程序启动后没有帮我创建表结构(mysql5.7)
  12. *
  13. * activiti:
  14. * history-level: full
  15. * db-history-used: true
  16. * database-schema-update: true
  17. * 解决方案:
  18. * 在数据库连接地址后面加上
  19. *
  20. * nullCatalogMeansCurrent=true
  21. * 就可以了。
  22. */
  23. @Test
  24. public void initMySql() {
  25. // DbSchemaCreate
  26. ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration()
  27. .setDatabaseSchema("activiti7")
  28. .setJdbcUrl(
  29. "jdbc:mysql:///activiti_demo?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true")
  30. .setDbHistoryUsed(true)
  31. .setJdbcPassword("123456")
  32. .setJdbcUsername("root")
  33. .setJdbcDriver("com.mysql.cj.jdbc.Driver")
  34. .setHistoryLevel(HistoryLevel.FULL)
  35. .setDatabaseType("mysql")
  36. .setDatabaseSchemaUpdate(ProcessEngineConfigurationImpl.DB_SCHEMA_UPDATE_CREATE)
  37. .buildProcessEngine();
  38. }
  39. }

上述采取的是Java 代码方式,也可采取 act-cfg.xml 文件
其中代码可以看 mvnRep_home\org\activiti\activiti-engine\7.1.0.M6\activiti-engine-7.1.0.M6.jar
image.png

2. springboot + activiti7 + mybatis 整合

尴尬 mysql8 搞事情,activiti7 不能自动建立表:

activiti-7.1.0.M6 + mysql8.0.22 无法自动生成数据表,启动报错, activiti7 无法建立引擎 Bean 对象。
同时,报数据表不存在。
改到 mysql5.7 就可以了。

yaml

  1. server:
  2. servlet:
  3. context-path: /v1/demo
  4. port: 9091
  5. spring:
  6. jackson:
  7. date-format: yyyy-MM-dd HH:mm:ss
  8. time-zone: GMT+8
  9. # activiti
  10. activiti:
  11. # 自动建表
  12. database-schema: ACTIVITI7
  13. #表示启动时检查数据库表,不存在则创建
  14. database-schema-update: true
  15. #表示哪种情况下使用历史表,这里配置为full表示全部记录历史,方便绘制流程图
  16. history-level: full
  17. #表示使用历史表,如果不配置,则工程启动后可以检查数据库,只建立了17张表,历史表没有建立,则流程图及运行节点无法展示
  18. db-history-used: true
  19. deployment-name: demo-mybatis-activiti7
  20. datasource:
  21. url: jdbc:mysql://localhost/activiti_demo?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8
  22. username: root
  23. password: 123456
  24. # url: jdbc:mysql://192.168.0.213:30001/xh_activiti?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&useSSL=false
  25. # username: root
  26. # password: Platform#123
  27. type: com.alibaba.druid.pool.DruidDataSource
  28. druid:
  29. # 下面为连接池的补充设置,应用到上面所有数据源中
  30. # 初始化大小,最小,最大
  31. initial-size: 5
  32. min-idle: 5
  33. max-active: 20
  34. # 配置获取连接等待超时的时间
  35. max-wait: 60000
  36. # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
  37. time-between-eviction-runs-millis: 60000
  38. # 配置一个连接在池中最小生存的时间,单位是毫秒
  39. min-evictable-idle-time-millis: 300000
  40. # validation-query: SELECT 1 FROM DUAL
  41. test-while-idle: true
  42. test-on-borrow: false
  43. test-on-return: false
  44. # # 打开PSCache,并且指定每个连接上PSCache的大小
  45. # pool-prepared-statements: true
  46. # # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
  47. # max-pool-prepared-statement-per-connection-size: 20
  48. # filters: stat,wall
  49. # use-global-data-source-stat: true
  50. # # 通过connectProperties属性来打开mergeSql功能;慢SQL记录
  51. # connect-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=2000
  52. # # 配置监控服务器
  53. # stat-view-servlet:
  54. # login-username: admin
  55. # login-password: admin
  56. # reset-enable: false
  57. # url-pattern: /druid/*
  58. # # 添加IP白名单
  59. # #allow:
  60. # # 添加IP黑名单,当白名单和黑名单重复时,黑名单优先级更高
  61. # #deny:
  62. # web-stat-filter:
  63. # # 添加过滤规则
  64. # url-pattern: /*
  65. # # 忽略过滤格式
  66. # exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"
  67. #liqubase是否开启
  68. #liquibase:
  69. # enabled: true
  70. # changeLog: "classpath:/db/changelog/db.changelog-master.xml"
  71. # checkChangeLogLocation: true
  72. # #用于跟踪更改历史记录的表的名称。
  73. # databaseChangeLogTable: DATABASECHANGELOG
  74. # #用于跟踪Liquibase并发使用情况的表的名称。
  75. # databaseChangeLogLockTable: DATABASECHANGELOGLOCK
  76. # #是否先清空数据库
  77. # dropFirst: false
  78. # #是否应该在执行更新之前测试回滚。
  79. # testRollbackOnUpdate: true
  80. custom:
  81. swagger:
  82. enabled: true
  83. mybatis:
  84. mapper-locations: classpath*:mapper/**
  85. configuration:
  86. map-underscore-to-camel-case: true
  87. log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  88. logging:
  89. level:
  90. com.demo.activiti7.mapper: debug

pom

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <!--<parent>
  6. <artifactId>my-activiti-demo</artifactId>
  7. <groupId>my.activiti.demo.com</groupId>
  8. <version>1.0-SNAPSHOT</version>
  9. </parent>-->
  10. <modelVersion>4.0.0</modelVersion>
  11. <artifactId>mybatis-activiti7-single</artifactId>
  12. <groupId>my.activiti.demo.com</groupId>
  13. <version>1.0-SNAPSHOT</version>
  14. <developers>
  15. <developer>
  16. <name>xiaohui</name>
  17. <email>xuxiaohuimail@163.com</email>
  18. <roles>
  19. <role>developer</role>
  20. </roles>
  21. <timezone>+8</timezone>
  22. </developer>
  23. </developers>
  24. <properties>
  25. <java.version>1.8</java.version>
  26. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  27. <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  28. <mapstruct>1.3.0.Final</mapstruct>
  29. <activiti.version>7.1.0.M6</activiti.version>
  30. <spring-boot>2.1.0.RELEASE</spring-boot>
  31. <fastjson>1.2.47</fastjson>
  32. <commons-collections>3.2.2</commons-collections>
  33. <commons-lang3>3.8.1</commons-lang3>
  34. <swagger-annotations>1.5.16</swagger-annotations>
  35. <springfox-swagger2>2.7.0</springfox-swagger2>
  36. <druid.version>1.2.4</druid.version>
  37. <mybatis-plus-boot-starter>3.1.0</mybatis-plus-boot-starter>
  38. <feign-hystrix>9.5.0</feign-hystrix>
  39. <lombok>1.16.20</lombok>
  40. <!--<liquibase-core>3.5.3</liquibase-core>-->
  41. <validation-api>2.0.1.Final</validation-api>
  42. <hibernate-validator>6.0.15.Final</hibernate-validator>
  43. <mybatis.version>3.5.6</mybatis.version>
  44. <mysql.jdbc.version>8.0.15</mysql.jdbc.version>
  45. </properties>
  46. <dependencyManagement>
  47. <dependencies>
  48. <dependency>
  49. <groupId>org.activiti.dependencies</groupId>
  50. <artifactId>activiti-dependencies</artifactId>
  51. <version>${activiti.version}</version>
  52. <scope>import</scope>
  53. <type>pom</type>
  54. </dependency>
  55. </dependencies>
  56. </dependencyManagement>
  57. <dependencies>
  58. <dependency>
  59. <groupId>org.springframework.boot</groupId>
  60. <artifactId>spring-boot-starter-actuator</artifactId>
  61. </dependency>
  62. <dependency>
  63. <groupId>org.springframework.boot</groupId>
  64. <artifactId>spring-boot-starter-web</artifactId>
  65. </dependency>
  66. <dependency>
  67. <groupId>org.springframework.boot</groupId>
  68. <artifactId>spring-boot-starter-test</artifactId>
  69. <version>RELEASE</version>
  70. <scope>test</scope>
  71. </dependency>
  72. <dependency>
  73. <groupId>org.activiti</groupId>
  74. <artifactId>activiti-spring-boot-starter</artifactId>
  75. <version>${activiti.version}</version>
  76. </dependency>
  77. <dependency>
  78. <groupId>org.mybatis.spring.boot</groupId>
  79. <artifactId>mybatis-spring-boot-starter</artifactId>
  80. </dependency>
  81. <dependency>
  82. <groupId>org.mybatis</groupId>
  83. <artifactId>mybatis</artifactId>
  84. <version>${mybatis.version}</version>
  85. </dependency>
  86. <dependency>
  87. <groupId>mysql</groupId>
  88. <artifactId>mysql-connector-java</artifactId>
  89. <version>${mysql.jdbc.version}</version>
  90. </dependency>
  91. <dependency>
  92. <groupId>org.mybatis.spring.boot</groupId>
  93. <artifactId>mybatis-spring-boot-starter</artifactId>
  94. <version>2.1.4</version>
  95. <exclusions>
  96. <exclusion>
  97. <artifactId>spring-boot-starter</artifactId>
  98. <groupId>org.springframework.boot</groupId>
  99. </exclusion>
  100. <exclusion>
  101. <groupId>org.mybatis</groupId>
  102. <artifactId>mybatis</artifactId>
  103. </exclusion>
  104. </exclusions>
  105. </dependency>
  106. <!-- Activiti生成流程图 -->
  107. <dependency>
  108. <groupId>org.activiti</groupId>
  109. <artifactId>activiti-image-generator</artifactId>
  110. </dependency>
  111. <dependency>
  112. <groupId>com.alibaba</groupId>
  113. <artifactId>druid-spring-boot-starter</artifactId>
  114. <version>${druid.version}</version>
  115. </dependency>
  116. <!-- utils -->
  117. <dependency>
  118. <groupId>com.alibaba</groupId>
  119. <artifactId>fastjson</artifactId>
  120. <version>${fastjson}</version>
  121. <scope>compile</scope>
  122. </dependency>
  123. <dependency>
  124. <groupId>commons-collections</groupId>
  125. <artifactId>commons-collections</artifactId>
  126. <version>${commons-collections}</version>
  127. <scope>compile</scope>
  128. </dependency>
  129. <dependency>
  130. <groupId>org.projectlombok</groupId>
  131. <artifactId>lombok</artifactId>
  132. <version>${lombok}</version>
  133. </dependency>
  134. <!-- data validation -->
  135. <dependency>
  136. <groupId>javax.validation</groupId>
  137. <artifactId>validation-api</artifactId>
  138. <version>${validation-api}</version>
  139. </dependency>
  140. <!--<dependency>
  141. <groupId>org.hibernate</groupId>
  142. <artifactId>hibernate-validator</artifactId>
  143. <version>${hibernate-validator}</version>
  144. </dependency>-->
  145. <!-- liquibase -->
  146. <!--<dependency>
  147. <groupId>org.liquibase</groupId>
  148. <artifactId>liquibase-core</artifactId>
  149. <version>${liquibase-core}</version>
  150. </dependency>-->
  151. <!-- swagger -->
  152. <dependency>
  153. <groupId>io.swagger</groupId>
  154. <artifactId>swagger-annotations</artifactId>
  155. <version>${swagger-annotations}</version>
  156. <scope>compile</scope>
  157. </dependency>
  158. <dependency>
  159. <groupId>io.springfox</groupId>
  160. <artifactId>springfox-swagger2</artifactId>
  161. <version>${springfox-swagger2}</version>
  162. <scope>compile</scope>
  163. </dependency>
  164. <dependency>
  165. <groupId>io.springfox</groupId>
  166. <artifactId>springfox-swagger-ui</artifactId>
  167. <version>${springfox-swagger2}</version>
  168. </dependency>
  169. <!-- 数据库驱动相关 -->
  170. <dependency>
  171. <groupId>com.alibaba</groupId>
  172. <artifactId>druid-spring-boot-starter</artifactId>
  173. <version>${druid.version}</version>
  174. <scope>compile</scope>
  175. </dependency>
  176. </dependencies>
  177. <build>
  178. <plugins>
  179. <plugin>
  180. <groupId>org.springframework.boot</groupId>
  181. <artifactId>spring-boot-maven-plugin</artifactId>
  182. </plugin>
  183. <plugin>
  184. <groupId>org.apache.maven.plugins</groupId>
  185. <artifactId>maven-compiler-plugin</artifactId>
  186. <configuration>
  187. <source>8</source>
  188. <target>8</target>
  189. </configuration>
  190. </plugin>
  191. </plugins>
  192. <finalName>mybatis-activiti7-single</finalName>
  193. </build>
  194. </project>

3. url 访问报错,出现 json 无法转化问题

  1. {
  2. "timestamp": "2021-02-05 17:00:36",
  3. "status": 500,
  4. "error": "Internal Server Error",
  5. "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\"])",
  6. "path": "/v1/demo/ins"
  7. }