一、若依分离版整合activiti7
Activiti7发布正式版之后,它与SpringBoot2.x已经完全支持整合开发。
注意事项:
- Activiti7版本号与SpringBoot版本号的兼容性
- 数据库的配置和连接必须正确
- 在创建流程定义时,需要使用正确的文件路径和文件名
实战版本:
- Activiti7 版本号 7.1.0.M6
- Spring Boot版本号2.5.15
整合步骤
因Activiti7 与 SpringBoot 整合后,默认情况下,集成了 SpringSecurity 安全框架,但若依分离版使用了 SpringSecurity ,固无需独立进行SpringSecurity的整合,只需在pom文件中添加activiti-spring-boot-starter的依赖,就可以实现Activiti7 与 SpringBoot 整合。
- SpringBoot整合Activiti7的配置
在工程的pom.xml文件中引入相关的依赖
具体依赖如下:
<!--Activiti-->
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter</artifactId>
<version>7.1.0.M6</version>
</dependency>
<!--Activiti-->
<!-- junit测试-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-test</artifactId>
</dependency>
<!-- junit测试-->
- SpringBoot的application.yml文件配置
实现Activiti7生成的表放到Mysql数据库中,需要在配置文件application.yml中添加相关的配置
在application-druid.yml文件中修改数据库的驱动、url、username、password
注意:activiti7默认没有开启数据库历史记录即不会生成相关历史记录表,需要手动配置开启
# 配置activiti # true:activiti会对数据库表进行更新。如果表不存在,则创建 # false:默认值,activiti启动,会对比数据库表保存的版本,如果没有表或版本不匹配,会抛异常。 spring.activiti.database-schema-update=true # activiti7需要手动开启记录 spring.activiti.db-history-used=true spring.activiti.history-level=full
spring
activiti:
#校验流程文件,自动部署验证设置:true-开启(默认)、false-关闭
check-process-definitions: false
# true:activiti会对数据库表进行更新。如果表不存在,则创建
# false:默认值,activiti启动,会对比数据库表保存的版本,如果没有表或版本不匹配,会抛异常。
database-schema-update: true
#表示哪种情况下使用历史表,这里配置为full表示全部记录历史,方便绘制流程图
#记录历史等级 可配置的历史级别有none, activity, audit, full
history-level: full
#true表示使用历史表
db-history-used: true
# 关闭 SpringAutoDeployment
deployment-mode: never-fail
# 是否使用uuid,false 不使用/ 默认是 true 使用
use-strong-uuids: false
-
测试集成结果
通过执行ProcessEngines.getDefaultProcessEngine()看系统是否生成activiti的25张表来判断是否集成成功
ProcessEngines.getDefaultProcessEngine()会在第一次调用时 初始化并创建一个流程引擎,以后再调用就会返回相同的流程引擎。 使用对应的方法可以创建和关闭所有流程引擎:ProcessEngines.init()和ProcessEngines.destroy()。
package com.ruoyi.test;
import org.activiti.engine.*;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.List;
@SpringBootTest
public class ActivitiTest {
/**
* 流程部署
*/
@Test
public void initActivitiTable(){
//1. 获取processEngine对象 --执行会创建25张表
ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
System.out.println(engine);
//2. 使用processEngine得到操作数据库的服务(RepositoryService)
RepositoryService repositoryService = engine.getRepositoryService();
//3. 使用ResitoryService进行流程部署,定义一个流程的名字,把bpmn文件和png文件部署到数据库里
Deployment deploy = repositoryService.createDeployment()
.name("test-workflow") //流程名称
.addClasspathResource("bpmn/test-workflow.bpmn") //资源文件 bpmn配置文件
.addClasspathResource("bpmn/diagram.png") //资源文件 png流程图
.disableSchemaValidation()
.deploy();
//4. 输出部署信息
System.out.println("流程部署的ID:"+deploy.getId());
System.out.println("流程部署的名字:"+deploy.getName());
}
}