Flowable第一篇、快速上手(Flowable安装、配置、集成)

目录

  1. Flowable 概述
  2. Flowable的安装与配置
    2.1. FlowableUI安装
    2.2. Flowable BPMN插件下载
    2.3 集成Spring Boot
  3. 流程审核操作
    3.3 简单流程部署
    3.4 启动流程实例
    3.5 流程审批

一、Flowable 概述

Flowable是一个轻量级、高效可扩展的工作流和业务流程管理(BPM)引擎,支持在Java应用程序中实现复杂的工作流自动化。Flowable最初是作为Activiti项目的一个分支发展而来的,但它现在已经成为一个独立的开源项目,并在企业级应用中得到了广泛使用

二、Flowable的安装与配置

在安装配置之前我们首先要明确学习 Flowable最基本的工具。

1、FlowableUI: FlowableUI 是 Flowable 引擎的一部分,专注于提供用户界面(UI)功能,用于业务流程管理(BPM)和工作流自动化。Flowable 是一个开源的 BPMN(业务流程建模与标记法)引擎,支持复杂的工作流和业务规则。 也就是说我们的流程图基本上就是由FlowableUI做出来。流程图做好后才由代码进行操作使用。

2、Flowable BPMN:IDEA中的插件用于编辑和可视化 Flowable BPMN 图,并提供导航和流程调试支持。提供在代码和 BPMN 图之间跳转的必要粘合剂,并将 IntelliJ 重构(例如更改 bean 名称)桥接到 XML 图。

1、FlowableUI安装

下面演示 FlowableUI下载配置

官方提供的FlowableUI是集成在Flowable源码包中的。但是在最新的7.0.0中已经移除了。我们需要在6.7.2中获取。进入GitHub将代码下载下来

https://github.com/flowable/flowable-engine/releases/tag/flowable-6.7.2

对应的流程设计器(FlowableUI)在如下目录中:

然后我们把这个<font style="color:rgb(51, 51, 51);background-color:rgb(243, 244, 244);">flowable-ui.war</font>扔到自己的Tomcat容器中<font style="color:rgb(51, 51, 51);background-color:rgb(243, 244, 244);">不要部署在有中文的目录下!!!,</font><font style="color:rgb(51, 51, 51);">Tomcat自己下载在此不做介绍</font>

进入命令行窗口输入 startup.bat 然后启动Tomcat服务即可:看到如下界面即为启动成功!

启动后访问FlowableUI地址:http://localhost:8080/flowable-ui

登录成功的效果

2、Flowable BPMN插件下载

进入IDEA的插件下载界面进行下载即可

3、集成Spring Boot

Spring Boot提倡约定大于配置。要开始工作,只需在项目中添加_ flowable-spring-boot-starter_ 或_ flowable-spring-boot-starter-rest_ 依赖。
<dependency>
    <groupId>org.flowable</groupId>
    <artifactId>flowable-spring-boot-starter</artifactId>
    <version>${flowable.version}</version>
</dependency>

因为Flowable需要数据库来存储数据。自引用上面的依赖会得到异常提示,也是为了方便操作大家在建立起简单的Spring Boot项目(即只引用Spring Web)后可以直接将以下依赖粘贴到Maven中

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!--Flowable的核心依赖-->
        <dependency>
            <groupId>org.flowable</groupId>
            <artifactId>flowable-spring-boot-starter</artifactId>
            <version>6.7.2</version>
        </dependency>
        <!-- MySQL的依赖 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.14</version>
        </dependency>
        <!-- 单元测试 -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
            <scope>test</scope>
        </dependency>
        <!-- 日志相关 -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.21</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.21</version>
        </dependency>

接下来只需要在 application.yml 中配置如下信息:

spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/flowable-learn?serverTimezone=UTC&nullCatalogMeansCurrent=true
    #注意在url中需要添加`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: true #关闭定时任务JOB
  #  将databaseSchemaUpdate设置为true。当Flowable发现库与数据库表结构不一致时,会自动将数据库表结构升级至新版本。前提是数据库中只能有flowable-learn架构,架构中不能有表。
  database-schema-update: true
server:
  port: 8082
logging:
  level:
    org:
      flowable: debug

之后启动项目。若无报错信息即为启动成功。

三、流程审核操作

在下载好 FlowableUI后可以试着画出流程图如下所示审批人依次是zhangsan和lisi

1、简单流程部署

此操作将会根据路径解析传入的流程图xml文件
 @Autowired
    private ProcessEngine processEngine;

    /**
     * 流程部署
     */
    @Test
    void deployFlow(){
        Deployment deploy = processEngine.getRepositoryService().createDeployment()
                .addClasspathResource("process/HolidayDemo1.bpmn20.xml") // 部署一个流程
                .name("第一个流程案例")
                .deploy();
        System.out.println(deploy.getId());
    }

方法执行成功后会在这三张表中记录相关的部署信息

  • act_ge_bytearray:记录流程定义的资源信息。xml和流程图的图片信息
  • act_re_deployment:流程部署表,记录这次的部署行为
  • act_re_procdef:流程定义表,记录这次部署动作对应的流程定义信息

2、启动流程实例

    /**
     * 发起流程
     */
    @Test
    void startProcess(){
        //  发起流程需要通过RuntimeService来实现
        RuntimeService runtimeService = processEngine.getRuntimeService();
        //	方法一:根据 act_re_procdef 表中的id
        String processId = "Exanple01:2:a7de575b-a73b-11ef-a2cb-005056c00001";
        //  根据流程定义Id启动 返回的是当前启动的流程实例 ProcessInstance
        ProcessInstance processInstance = runtimeService.startProcessInstanceById(processId);
        System.out.println("processInstance.getId() = " + processInstance.getId());
//       	方法二:根据流程图中定义的Key启动
//        String processKey = "HolidayDemo1";
//        runtimeService.startProcessInstanceByKey(processKey);
    }

这时我们可以在act_ru_task表中看到对应的记录。act_ru_task记录的都是当前待办的记录信息

还有一个要注意的:每启动一个流程实例那么就会在act_hi_procinst表中维护一条记录。然后在act_ru_execution会记录流程的分支

流程定义和流程实例的关系:

  • 流程定义:Java中的类
  • 流程实例:Java中的对象

3、流程审批

   /**
     * 待办任务查询
     */
    @Test
    void findTask(){
        // 任务查询这块我们可以通过 TaskService 来实现
        TaskService taskService = processEngine.getTaskService();
        // 查询的其实就是 act_ru_task 中的记录
        List<Task> list = taskService.createTaskQuery()
                .taskAssignee("zhangsan") // 根据审批人来查询
                .list();// 返回多条记录
        for (Task task : list) {
            System.out.println(task.getId());
        }
    }

    /**
     * 完成任务的审批
     */
    @Test
    void completeTask(){
        TaskService taskService = processEngine.getTaskService();
        // 需要审批的任务 Id
        String taskId = "926b41f8-7a4c-11ee-97fd-c03c59ad2248";
        taskService.complete(taskId); // 通过complete方法完成审批
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值