博客
关于我
Spring Boot + flowable 完美结合,快速实现工作流
阅读量:796 次
发布时间:2023-03-22

本文共 5639 字,大约阅读时间需要 18 分钟。

流able工作流引擎是流程自动化领域的重要工具,帮助开发者构建高效的业务流程。以下是流able-6.6.0的官方示例应用程序的部署与使用指南。

1. 安装流able引擎

首先,从流able的官方GitHub仓库下载流able-6.6.0的压缩包:

https://github.com/flowable/flowable-engine/releases/download/flowable-6.6.0/flowable-6.6.0.zip

解压后,将flowable-6.6.0\wars\flowable-ui.war文件部署到Apache Tomcat 9.0.37的webapps\flowable-ui目录下。

2. 启动流able UI

访问http://localhost:8080/flowable-ui,使用默认账户admin和密码test登录。

3. 创建流程定义

进入APP.MODELER,设计并创建所需的流程定义。流able默认连接到本地数据库,因此需要将MySQL驱动mysql-connector-java-5.1.45.jar拷贝至apache-tomcat-9.0.37\webapps\flowable-rest\WEB-INF\lib

4. 流程模型解析

流able的流程定义文件采用BPMN格式,文件命名为leave_approval.bpmn20.xml。文件内容如下:

5. 导入流程文件

将上述文件保存为leave_approval.bpmn20.xml,可以通过流able UI导入至工作区,或者配置数据库连接后直接使用。

6. 使用Spring Boot开发流程

在Spring Boot项目中,添加必要的依赖项:

org.flowable
flowable-spring-boot-starter
6.6.0
mysql
mysql-connector-java
5.1.45

配置application.yml,设置数据库连接信息:

spring:
datasource:
url: jdbc:mysql://localhost:3306/flowable?useSSL=false&characterEncoding=UTF-8&serverTimezone=GMT+8
driver-class-name: com.mysql.jdbc.Driver
username: root
password: 123456

7. Flowable引擎API使用说明

Flowable引擎提供多个核心服务:

  • RepositoryService:用于管理流程定义和部署。
  • RuntimeService:用于启动和管理流程实例。
  • HistoryService:提供流程历史数据查询。
  • TaskService:操作流程任务。
  • IdentityService:管理用户和组。
  • 以下是启动流程实例的示例代码:

    import org.flowable.engine.RuntimeService;
    import org.flowable.engine.ProcessInstance;
    public class TestFlowable {
    @Autowired
    private RuntimeService runtimeService;
    public void startLeaveApprovalProcess() {
    Map
    variables = new HashMap<>();
    variables.put("command", "agree");
    String processDefinitionKey = "leave_approval";
    String businessKey = "schoolleave";
    ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(
    processDefinitionKey,
    businessKey,
    variables
    );
    System.out.println("流程启动成功:" + processInstance.getId());
    }
    }

    8. 数据库表结构

    Flowable引擎的数据库表主要分为运行时表和历史表:

    • 运行时表

      • ACT_RU_EXECUTION:运行流程执行实例
      • ACT_RU_TASK:运行流程任务节点
      • ACT_RU_VARIABLE:流程变量
    • 历史表

      • ACT_HI_PROCESSION:历史流程实例
      • ACT_HI_TASK:历史流程任务

    9. 示例代码解析

    以下是完整的Spring Boot项目代码示例:

    import lombok.extern.slf4j.Slf4j;
    import org.flowable.engine.HistoryService;
    import org.flowable.engine.RepositoryService;
    import org.flowable.engine.RuntimeService;
    import org.flowable.engine.history.HistoricProcessInstance;
    import org.flowable.engine.repository.Deployment;
    import org.flowable.engine.repository.ProcessDefinition;
    import org.flowable.engine.runtime.Execution;
    import org.flowable.engine.runtime.ProcessInstance;
    import org.flowable.idm.api.Group;
    import org.flowable.idm.api.User;
    import org.flowable.task.api.Task;
    import org.flowable.task.api.history.HistoricTaskInstance;
    import org.springframework.beans.factory.annotation.Autowired;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import java.util.zip.ZipInputStream;
    @Slf4j
    public class TestFlowable {
    @Autowired
    private RepositoryService repositoryService;
    @Autowired
    private RuntimeService runtimeService;
    @Autowired
    private HistoryService historyService;
    @Autowired
    private org.flowable.engine.TaskService taskService;
    @Autowired
    private org.flowable.engine.IdentityService identityService;
    public void createDeploymentZip() throws FileNotFoundException {
    File zipTemp = new File("f:/leave_approval.bpmn20.zip");
    ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(zipTemp));
    Deployment deployment = repositoryService.createDeployment()
    .addZipInputStream(zipInputStream)
    .deploy();
    log.info("部署成功:{}", deployment.getId());
    }
    public void testProcessDefinition() {
    List
    list = repositoryService.createProcessDefinitionQuery().processDefinitionKey("leave_approval").list();
    List
    pages = repositoryService.createProcessDefinitionQuery().processDefinitionKey("leave_approval").listPage(1, 30);
    }
    public void startLeaveApproval() {
    String processDefinitionKey = "leave_approval";
    String businessKey = "schoolleave";
    Map
    variables = new HashMap<>();
    variables.put("command", "agree");
    ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processDefinitionKey, businessKey, variables);
    log.info("流程启动成功:{}", processInstance.getId());
    }
    public void queryHistoricProcess() {
    List
    historicProcessList = historyService.createHistoricProcessInstanceQuery().processDefinitionKey("leave_approval").list();
    List
    historicTaskList = historyService.createHistoricTaskInstanceQuery().processDefinitionKey("leave_approval").list();
    }
    }

    10. 常用API操作

    • 启动流程:runtimeService.startProcessInstanceByKey(processDefinitionKey, businessKey, variables);
    • 查询流程实例:runtimeService.createExecutionQuery().processDefinitionKey("leave_approval").list();
    • 查询历史流程:historyService.createHistoricProcessInstanceQuery().processDefinitionKey("leave_approval").list();
    • 获取任务列表:taskService.createTaskQuery().taskCandidateGroup(candidateGroup).orderByTaskCreateTime().desc().list();

    通过以上方法,可以方便地开发和管理基于Flowable的工作流系统。

    转载地址:http://lsqfk.baihongyu.com/

    你可能感兴趣的文章
    Objective-C实现odd even sort奇偶排序算法(附完整源码)
    查看>>
    Objective-C实现page rank算法(附完整源码)
    查看>>
    Objective-C实现PageRank算法(附完整源码)
    查看>>
    Objective-C实现pascalTriangle帕斯卡三角形算法(附完整源码)
    查看>>
    Objective-C实现perfect cube完全立方数算法(附完整源码)
    查看>>
    Objective-C实现pollard rho大数分解算法(附完整源码)
    查看>>
    Objective-C实现quick select快速选择算法(附完整源码)
    查看>>
    Objective-C实现recursive bubble sor递归冒泡排序算法(附完整源码)
    查看>>
    Objective-C实现recursive insertion sort递归插入排序算法(附完整源码)
    查看>>
    Objective-C实现RedBlackTree红黑树算法(附完整源码)
    查看>>
    Objective-C实现redis分布式锁(附完整源码)
    查看>>
    Objective-C实现reverse letters反向字母算法(附完整源码)
    查看>>
    Objective-C实现ripple adder涟波加法器算法(附完整源码)
    查看>>
    Objective-C实现RodCutting棒材切割最大利润算法(附完整源码)
    查看>>
    Objective-C实现Romberg算法(附完整源码)
    查看>>
    Objective-C实现RRT路径搜索(附完整源码)
    查看>>
    Objective-C实现rsa 密钥生成器算法(附完整源码)
    查看>>
    Objective-C实现RSA密码算法(附完整源码)
    查看>>
    Objective-C实现runge kutta龙格-库塔法算法(附完整源码)
    查看>>
    Objective-C实现segment tree段树算法(附完整源码)
    查看>>