Flowable进阶学习(七)整合SpringBoot(自动部署、手动部署、启动流程、完成流程);多人会签与或签
文章目录
一、整合SpringBoot
- 创建Maven项目
- 配置pom.xml文件
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.8</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.hx</groupId>
<artifactId>Flowable_SpringBoot2</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>Flowable_SpringBoot2</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>8.0.32</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<version>1.5.9.RELEASE</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.flowable</groupId>
<artifactId>flowable-spring-boot-starter</artifactId>
<version>6.6.0</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.24</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
</dependencies>
- 配置application.yml文件
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/flowable2?serverTimeZone=UTC&nullCatalogMeansCurrent=true
username: root
password: admin
hikari:
minimum-idle: 5
idle-timeout: 600000
maximum-pool-size: 10
auto-commit: true
pool-name: MyHikariCP
max-lifetime: 1800000
connection-timeout: 30000
connection-test-query: SELECT 1
flowable:
# 关闭定时任务JOB
async-executor-activate: false
# 将databaseSchemaUpdate设置为true。当flowable发现数据库不一致的时候,会自动将数据库表结构更新到最新版本。
database-schema-update: true
server:
port: 8888
自动部署
processes目录下的任何BPMN 2.0流程定义都会被自动部署。创建processes目录,并在其中创建示例流程定义(命名为one-task-process.bpmn20.xml)。
cases目录下的任何CMMN 1.1事例都会被自动部署。
forms目录下的任何Form定义都会被自动部署。
在SpringBoot项目中会自动部署存储在resource\processes目录下的流程定义。(但是只有在第一次启动的时候才会自动部署,而后续新增的部署文件不会部署。)
但是在我的实际测试过程中,发现在调用部署方法的时候,会重新部署processes目录下的流程定义。我们可以手动来条用deploy方法即可。
@Test
void test_deploy(){
Deployment deploy = repositoryService.createDeployment()
.name("ManualDeployment").deploy();
System.out.println(deploy.getId());
}
手动部署
如果存在不希望被调用的流程定义,可以不放到processes目录下。
@Autowired
private RepositoryService repositoryService;
@Test
void deploy(){
Deployment deployment = repositoryService.createDeployment()
.addClasspathResource("processes/出差申请流程.bpmn20.xml")
.name("出差申请流程2023").deploy();
System.out.println("deployment.getId() = " + deployment.getId());
System.out.println("deployment.getName() = " + deployment.getName());
}
启动流程
@Autowired
private RuntimeService runtimeService;
@Test
void startFlow() {
Map<String, Object> params = new HashMap<>();
params.put("assignee0", "whx");
params.put("assignee1", "huathy");
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("qjlc23", params);
}
处理\完成流程
@Autowired
private TaskService taskService;
@Test
void completeTask() {
Task task = taskService.createTaskQuery()
.processDefinitionKey("qjlc23")
.taskCandidateOrAssigned("whx")
.singleResult();
if (task != null) {
taskService.complete(task.getId());
System.out.println(task.getAssignee()+"-完成任务-"+task.getId());
}
}
二、多人会签
多人会签是指一个任务需要多个人来审批。多人或签是指的=一个任务需要多个人中的一个审批通过即可。
1. 绘制流程图
2. 编码
MultiInstCompleteTask.java
package com.example.flowdemo.listener;
import org.flowable.engine.delegate.DelegateExecution;
import org.springframework.stereotype.Component;
import java.io.Serializable;
/**
* @author Huathy
* @date 2023-01-27 08:47
* @description
*/
@Component("mulitiInstCompleteTask")
public class MultiInstCompleteTask implements Serializable {
/**
* 完成任务时需要触发的方法
* @param execution
* @return true/false 表示会签任务是否结束
*/
public boolean completeTask(DelegateExecution execution){
System.out.println("总会签数量:"+execution.getVariable("nrOfInstances"));
System.out.println("当前完成会签数量:"+execution.getVariable("nrOfActiveInstances"));
System.out.println("当前完成会签任务数量:"+execution.getVariable("nrOfCompletedInstances"));
// 上面的这些nr*变量是由flowable提供的。而下面的flag是我们自定义的。
Boolean flag = (Boolean) execution.getVariable("flag");
System.out.println("当前意见:"+flag);
return flag;
}
}
MultiInstTaskListener.java
package com.example.flowdemo.listener;
import org.flowable.engine.delegate.DelegateExecution;
import org.springframework.stereotype.Component;
import java.io.Serializable;
/**
* @author Huathy
* @date 2023-01-27 08:57
* @description
*/
@Component("mulitiInstTaskListener")
public class MultiInstTaskListener implements Serializable {
public void completeListener(DelegateExecution execution){
System.out.println("任务ID execution.getId() = " + execution.getId());
System.out.println("execution.getVariable(\"persons\") = " + execution.getVariable("persons"));
System.out.println("execution.getVariable(\"person\") = " + execution.getVariable("person"));
}
}
2. 启动流程
这里我们配置的是串行执行的,所以第一次启动流程只会创建一个任务。如果配置的是并行执行的,那么会在启动任务的时候创建所有的任务。
3. 完成任务
如果是串行执行的,那么在完成任务的时候,会创建下一个任务。
本文来自博客园,作者:Huathy,遵循 CC 4.0 BY-NC-SA 版权协议。转载请注明原文链接:https://www.cnblogs.com/huathy/p/17253791.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具