【Flowable】 Flowable整合Springboot环境和多人会签

Metadata

title: 【Flowable】 Flowable整合Springboot环境和多人会签
date: 2023-01-23 17:46
tags:
  - 行动阶段/完成
  - 主题场景/组件
  - 笔记空间/KnowladgeSpace/ProgramSpace/ModuleSpace
  - 细化主题/Module/Flowable
categories:
  - Flowable
keywords:
  - Flowable
description: 【Flowable】 Flowable整合Springboot环境和多人会签

【Flowable】 Flowable整合Springboot环境和多人会签

Flowable 在 Java 项目中开发我们更多的还是会在 SpringBoot 环境中来使用,所以整合 SpringBoot 环境还是必不可少的。具体我们来看看如何实现

1. 添加相关依赖

首先需要添加必要的依赖

<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.14</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.21</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.13.2</version>
        <scope>test</scope>
    </dependency>

2. 添加对应的配置

然后在属性文件中添加数据的配置信息和 Flowable 的必要配置。

spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/flowable1?serverTimezone=UTC&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:
  async-executor-activate: false #关闭定时任务JOB
  #  将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 定义都会被自动部署。

通过手动方式来部署, 我们可以从容器中直接获取相关的对象,ProcessEngine,RuntimeService 等。

@SpringBootTest
class FlowableSpringBoot28ApplicationTests {

@Autowired
private ProcessEngine processEngine;

@Autowired
private RepositoryService repositoryService;


@Autowired
private TaskService taskService;


@Autowired
private RuntimeService runtimeService;


/**
 * Deploy
 */
@Test
void testDeploy() {
    //RepositoryService repositoryService = processEngine.getRepositoryService();
    Deployment deploy = repositoryService.createDeployment()
            .addClasspathResource("请假流程.bpmn20.xml")
            .name("holiday")
            .deploy();
    System.out.println("deploy.getId() = " + deploy.getId());
    System.out.println("deploy.getName() = " + deploy.getName());
}

}

3.2 启动流程

启动流程和前面介绍的就没什么差异了,通过 RuntimeService 来实现

/**
 * start process
 */
@Test
void startFlow(){
    Map<String,Object> map = new HashMap();
    map.put("assignee0","zhangsan");
    map.put("assignee1","zhangsan");
    runtimeService.startProcessInstanceById("holiday28:2:3653a34e-ae45-11ec-969d-c03c59ad2248",map);
}

3.3 处理流程

处理流程和前面介绍的也一样,通过 TaskService 来处理

/**
 * complete Task
 */
@Test
void completeTask(){
    Task task = taskService.createTaskQuery()
            .processInstanceId("fb166cd8-ae45-11ec-92c4-c03c59ad2248")
            .taskAssignee("zhangsan")
            .singleResult();
    if(task != null){
        taskService.complete(task.getId());
        System.out.println("complete ....");
    }
}