2.添加对应的配置org.flowable flowable-spring-boot-starter 6.6.0 com.alibaba druid 1.1.14 mysql mysql-connector-java 8.0.21 junit junit 4.13.2 test
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://10.9.31.40:13306/flowable_learn?charset=utf8mb4&useSSL=false&nullCatalogMeansCurrent=true
username: root
password: 123456
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: 8082
系统启动的时候检查如果数据库对应的表结构没有创建,会帮助我们先创建对应的表结构
3.案例应用 3.1 流程部署- processes目录下的任何BPMN 2.0流程定义都会被自动部署。创建processes目录,并在其中创建示例流程定义(命名为one-task-process.bpmn20.xml)。
- cases目录下的任何CMMN 1.1定义都会被自动部署。
- forms目录下的任何Form定义都会被自动部署。
通过手动方式来部署
在resources/process目录下创建流程定义文件
编写拒绝策略处理器
public class SendRejectionMailHandler implements JavaDelegate {
@Override
public void execute(DelegateExecution delegateExecution) {
System.out.println("===========================================================");
System.out.println("请假请求被拒绝!!!");
System.out.println("===========================================================");
}
}
@SpringBootTest
class SpringbootApplicationTests {
@Autowired
private ProcessEngine processEngine;
@Autowired
private RepositoryService repositoryService;
@Autowired
private TaskService taskService;
@Autowired
private RuntimeService runtimeService;
@Test
void testDeployment() {
Deployment deployment = repositoryService.createDeployment()
.addClasspathResource("process/one-task-process.bpmn20.xml")
.name("请假流程")
.deploy();
System.out.println("deploy.getId() = " + deployment.getId());
System.out.println("deploy.getName() = " + deployment.getName());
}
}
3.2 启动流程
启动流程和前面介绍的就没什么差异了,通过RuntimeService来实现
@Test
void startProcess() {
Map var = new HashMap();
var.put("assignee-1", "小明同学");
var.put("assignee-2", "小红同学");
runtimeService.startProcessInstanceById("holidayRequest:6:c9fa93b2-d19f-11ec-a572-00e04c2fc932", var);
}
3.3 处理流程
处理流程和前面介绍的也一样,通过TaskService来处理
@Test
void listTask() {
List list = taskService.createTaskQuery()
.processDefinitionId("holidayRequest:6:c9fa93b2-d19f-11ec-a572-00e04c2fc932")
.taskAssignee("小红同学").list();
for (Task task : list) {
System.out.println("task.getProcessDefinitionId() = " + task.getProcessDefinitionId());
System.out.println("task.getId() = " + task.getId());
System.out.println("task.getAssignee() = " + task.getAssignee());
System.out.println("task.getName() = " + task.getName());
}
}
@Test
void startTask() {
Task task = taskService.createTaskQuery()
.processDefinitionId("holidayRequest:6:c9fa93b2-d19f-11ec-a572-00e04c2fc932")
.taskAssignee("小红同学")
.singleResult();
// 添加流程变量
Map variables = new HashMap<>();
variables.put("approved", false);
// 完成任务
if (Objects.nonNull(task)) {
taskService.complete(task.getId(), variables);
System.out.println("Complete...");
}
}



