这里主要介绍整合Activiti6.0版本,其他版本暂且没有整合过,如若需要整合其他版本,可以搜索参考网上其他博主的文章
目录
1.pom文件加入依赖
<!-- activiti -->
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter-basic</artifactId>
<version>6.0.0</version>
<exclusions>
<exclusion>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter-rest-api</artifactId>
<version>6.0.0</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
</dependency>
<!--activiti modeler start-->
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-json-converter</artifactId>
<version>6.0.0</version>
<exclusions>
<exclusion>
<groupId>org.activiti</groupId>
<artifactId>activiti-bpmn-model</artifactId>
</exclusion>
</exclusions>
</dependency>
2.配置文件配置activiti相关配置项
注意层级关系,在spring下,和datasource同级
# activiti 模块
activiti:
# 解决启动报错:class path resource [processes/] cannot be resolved to URL because it does not exist
check-process-definitions: false
# 检测身份信息表是否存在
db-identity-used: true
# 默认为false
# false:项目启动时,如果数据库中没有表将抛出异常(上线后使用)
# true:项目启动时,如果数据库中没有表将自动生成(开发和测试时使用)
database-schema-update: true
3.数据库配置项中还有一个地方需要注意!!
url后面加上&nullCatalogMeansCurrent=true
因为mysql使用schema标识库名而不是catalog,因此mysql会扫描所有的库来找表, 如果其他库中有相同名称的表,activiti就以为找到了,本质上这个表在当前数据库中并不存在。 解决办法就是在数据库链接的配置后面加上 nullCatalogMeansCurrent=true,标识之搜索当前链接的库。
我看网上其他人说数据库版本如果是5.*的默认是true,如果是8.*的默认是false,大家有兴趣可以试下
4.启动类上禁用activiti安全策略
@SpringBootApplication(exclude = {
org.activiti.spring.boot.SecurityAutoConfiguration.class
})
5.资源目录下添加processes目录(流程存放目录)
接下来启动项目,就会发现数据库中新增了activit相关的28张表了
6.安装插件
安装插件: activiti BPMN visualizer
然后你就可以在idea中processes目录下新建 bpmn20.xml文件,新建流程图文件
打开编辑器,开始绘图
常见问题
1.org/springframework/security/config/annotation/authentication/configurers/GlobalAuthenticationConfigurerAdapter.class] cannot be opened because it does not exist
原因:SpringBoot 2.0的start中默认有一个"spring-boot-autoconfigure-2.0..RELEASE.jar",如果你还引用了activiti的"activiti-spring-boot-starter-rest-api.jar"包,需要将两个包中的 SecurityAutoConfiguration.class 其中之一排除。我选择禁用activiti安全策略。
也就是第四步中写的操作
2.Parameter 0 of method springAsyncExecutor in org.activiti.spring.boot.AbstractProcessEngineAutoConfiguration required a single bean, but 4 were found
原因:Activiti自动配置类中的错误。它依赖于它们TaskExecutor在应用程序上下文中唯一的一个bean,或者如果有多个bean,则它们中的一个是主要的。可以通过声明自己的TaskExecutorbean并将其标记为@Primary:解决该问题。
解决方案:在项目的Application启动类中添加以下代码即可。
@Primary
@Bean
public TaskExecutor primaryTaskExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
return executor;
}
3.nested exception is java.io.FileNotFoundException: class path resource [processes/] cannot be resolved to URL because it does not exist
解决方案:
(1)在resource目录下添加processes文件夹
(2)在application.properties下配置
#启动报错class path resource [processes/] cannot be resolved to URL because it does not exist
spring.activiti.check-process-definitions=false
4.启动时没有创建表:
解决方案:
(1)检查yml文件中是否有如下配置:
spring:
activiti:
database-schema-update: true
(2)修改数据库连接配置: 加上【nullCatalogMeansCurrent=true】
在使用mysql-connect 8.+以上版本的时候需要添加nullCatalogMeansCurrent=true参数,否则在使用mybatis-generator生成表对应的xml等时会扫描整个服务器里面的全部数据库中的表,而不是扫描对应数据库的表。
dynamic:
datasource:
slave1:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://192.168.1.4:3308/database?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true
"常见错误"中的解答方案来自于这篇文章
原文链接:https://blog.csdn.net/weixin_41830501/article/details/107930730
4.去除security异常
因为原项目比较老,用的shiro,但是activiti中有集成security.
原本是在启动类中排除了org.activiti.spring.boot.SecurityAutoConfiguration.class
但是却不起作用,swagger都进不去,所有接口都被security拦截了
解决方案:
继续排除security配置类
@SpringBootApplication(exclude ={
org.activiti.spring.boot.SecurityAutoConfiguration.class,
SecurityAutoConfiguration.class
})
注意包别弄错了
打开显示正常
需要注意的是: 我之前有一个项目本身就是用的Security,当时就只排除了activiti的安全策略,并没有排除Spring的Security也能用. 因此,这个解决方案目前只适用于当前情况