Springboot整合Flowable流程引擎

简介: Springboot整合Flowable流程引擎

文章目录

前言

Flowable是一个开源的工作流引擎,它基于Activiti引擎进行发展,Flowable主要用于为业务流程管理(BPM)和工作流的设计、操作、监控提供支持。

1. Flowable的主要表结构

1.1 通用数据表(通用表)

这类表在Flowable中主要提供存储通用类型数据的功能,如流程名称,创建时间等。如下是通用表的主要成员:

  • act_ge_bytearray:存储二进制数据,如流程定义文件,流程图等。
  • act_ge_property:存储系统全局属性,如数据库版本信息等。

1.2运行时数据表(runtime表)

这类表主要用于在流程运行过程中,存储实时的流程数据。如下是运行时数据表的主要成员:

act_ru_event_subscr:存储运行时事件订阅数据,如boundary事件等。

act_ru_execution:存储运行时流程实例,包括当前状态,子流程引用等。

act_ru_identitylink:存储运行时任务的参与者(用户与组)的关联关系。

act_ru_job:存储工作任务的相关数据,如执行时间,重试次数等。

act_ru_task:存储运行时任务数据,如所属流程实例,任务名称等。

act_ru_variable:存储运行时的流程变量数据。

1.3.历史数据表(history表)

这类表主要用于在流程完成后,存储历史的流程数据,如流程实例,任务,变量等。如下是历史数据表的主要成员:

act_hi_attachment:存储附件相关历史数据。

act_hi_comment:存储评论相关历史数据。

act_hi_detail:存储流程变量修改相关历史数据。

act_hi_identitylink:存储任务参与者相关历史数据。

act_hi_procinst:存储流程实例相关历史数据。

act_hi_actinst:存储活动节点相关历史数据。

act_hi_taskinst:存储任务实例相关历史数据。

act_hi_varinst:存储流程变量相关历史数据。

1.4. 身份数据表(identity表)

这类表主要用于存储组织机构和用户权限相关的数据。如下是身份数据表的主要成员:

  • act_id_group:存储用户组相关数据。
  • act_id_membership:存储用户与用户组的关联关系。
  • act_id_user:存储用户相关数据。

1.5. 流程定义数据表(repository表)

这类表主要用于存储流程定义相关的数据。如下是流程定义数据表的主要成员:

act_re_deployment:存储流程部署相关数据。

act_re_model:存储流程设计模型相关数据。

act_re_procdef:存储流程定义相关数据。

2.springboot整合flowable

2.1 流程定义

. 流程定义(Process Definition):流程定义是包含所有流程与审批步骤(任务节点、网关等)的XML文件,通常使用BPMN(Business Process Model and Notation) 2.0语言编写。这些文件在部署到Flowable引擎时会存储到数据库中,以便在运行时创建实例。

数据库表:Flowable使用关系型数据库来存储审批流相关的信息。其中的相关表格如下:

ACT_RE_PROCDEF: 存储流程定义信息

ACT_RE_DEPLOYMENT: 存储部署信息

ACT_RU_TASK: 存储运行时任务信息

ACT_RU_EXECUTION: 存储运行时流程实例

ACT_HI_PROCINST: 存储历史流程实例

ACT_HI_ACTINST: 存储历史活动实例

ACT_HI_TASKINST: 存储历史任务实例

ACT_HI_DETAIL: 存储历史明细数据

ACT_HI_COMMENT: 存储审批评论数据

2.2 引入依赖

 

 <properties>

   <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

   <maven.compiler.source>1.8</maven.compiler.source>

   <maven.compiler.target>1.8</maven.compiler.target>

   <flowable.version>6.7.2</flowable.version>

 </properties>

 <dependency>

    <groupId>org.flowable</groupId>

    <artifactId>flowable-spring-boot-starter</artifactId>

    <version>${flowable.version}</version>

  </dependency>

<dependency>

     <groupId>org.springframework.boot</groupId>

     <artifactId>spring-boot-starter-web</artifactId>

   </dependency>

    <!--flowable引擎自动配置-->

   <dependency>

     <groupId>org.flowable</groupId>

     <artifactId>flowable-spring-boot-starter</artifactId>

     <version>${flowable.version}</version>

   </dependency>

   <dependency>

     <groupId>mysql</groupId>

     <artifactId>mysql-connector-java</artifactId>

     <version>8.0.22</version>

   </dependency>

2.3 启动类

/**

* 启动类

*

*/

@SpringBootApplication

public class FlowableApplication

{

   public static void main( String[] args )

   {

       System.out.println("流程系统启动.................");

       SpringApplication.run(FlowableApplication.class,args);

       System.out.println("流程系统启动成功.................");

   }

}

2.4 启动服务

启动服务会在数据库自动创建flowable的表,可能会出现下边的错误。

2.4.1 启动错误,数据库驱动版本问题

nested exception is org.flowable.common.engine.api.FlowableException: Could not update Flowable database schema: unknown version from database: ‘6.8.0.0’

解决方法:

修改mysql驱动的版本为8.0.22

2.4.2 启动报错

Caused by: java.sql.SQLSyntaxErrorException: Specified key was too long; max key length is 767 bytes atcom.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:120) ~[mysql-connector-java-8.0.22.jar:8.0.22] at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97) ~[mysql-connector-java-8.0.22.jar:8.0.22]

项目mysql的版本5.6.51

导致上面报错的原因是由于InnoDB表的索引长度限制,在MySQL5.6版本后引入了参数innodb_large_prefix可以解决这个问题。该参数控制是否允许单列的索引长度超过767字节,有ON和OFF两个取值:

ON :Innodb表的行记录格式是Dynamic或Compressed的前提下,单列索引长度上限扩展到3072个字节

OFF:Innodb表的单例索引长度最多为767个字节,索引长度超出后,主键索引会创建失败,辅助索引会被截断成为前缀索引。

进行如下设置,重启mysql:

set global innodb_large_prefix = ON;

SET GLOBAL innodb_file_format=Barracuda;

SET GLOBAL innodb_file_per_table=ON;

2.4 下载BPMN插件

f50b1fbae11f4258a639de673dc84dfb.png

ed15cf475a1e475dbae161b475a9a8d5.png

4ffd98627b8a49dd9d49ca73b8a3d21b.png

文件的后缀名字 demo.bpmn20.xml

demo.bpmn20.xml

<?xml version="1.0" encoding="UTF-8"?>

<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:flowable="http://flowable.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.flowable.org/processdef">

 <process id="DemoProcess" name="DemoProcess">

   <startEvent id="start"/>

   <sequenceFlow id="flow1" sourceRef="start" targetRef="userTask"/>

   <userTask id="userTask" name="User Task" flowable:assignee="${creator}"/>

   <sequenceFlow id="flow2" sourceRef="userTask" targetRef="end"/>

   <endEvent id="end"/>

 </process>

</definitions>

2.5 部署流程

/**

* 流程部署

*/

@Component

public class ProcessDeployer {

   @Autowired

   private RepositoryService repositoryService;

   @PostConstruct

   public void init() {

       repositoryService.createDeployment()

               .addClasspathResource("demo.bpmn20.xml")

               .deploy();

   }

}

启动完成之后数据库表存储流程定义:=>ACT_RE_PROCDEF

c699b655ecb84d498471d8362b676fae.png

存储部署表

1d6491f9fa484514bce409c16b6901bb.png

2.6 启动流程

   //查询指定流程所有启动的实例列表

   @Autowired

   private RuntimeService runtimeService;

 /**

    * 启动

    * @param creator

    */

   public void startProcess(String creator) {

       Map<String, Object> variables = new HashMap<>();

       variables.put("creator", creator);

       runtimeService.startProcessInstanceByKey("demoProcess", variables);

   }

2.7 完成流程

根据用户获取用户任务以及审批流

   @Autowired

   TaskService taskService;

   //获取用户ID获取的任务列表

   public List<Task> getTasksAssignedToUser(String userId) {

       TaskQuery taskQuery = taskService.createTaskQuery().taskAssignee(userId);

       return taskQuery.list();

   }

   //用户处理流程列表

   public void completeTask(String taskId, boolean approved) {

       Task task = taskService.createTaskQuery().taskId(taskId).singleResult();

       if (task != null) {

           Map<String, Object> variables = new HashMap<>();

           variables.put("approved", approved);

           taskService.complete(taskId, variables);

       }

   }

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
10月前
|
XML JSON Java
【SpringBoot(三)】从请求到响应再到视图解析与模板引擎,本文带你领悟SpringBoot请求接收全流程!
Springboot专栏第三章,从请求的接收到视图解析,再到thymeleaf模板引擎的使用! 本文带你领悟SpringBoot请求接收到渲染的使用全流程!
653 3
|
XML Java 应用服务中间件
SpringBoot项目打war包流程
本文介绍了将Spring Boot项目改造为WAR包并部署到外部Tomcat服务器的步骤。主要内容包括:1) 修改pom.xml中的打包方式为WAR;2) 排除Spring Boot内置的Tomcat依赖;3) 添加Servlet API依赖;4) 改造启动类以支持WAR部署;5) 打包和部署。通过这些步骤,可以轻松地将Spring Boot应用转换为适合外部Tomcat服务器的WAR包。
933 64
SpringBoot项目打war包流程
SpringBoot启动流程
springboot项目在启动的时候, 首先会执行启动引导类里面的SpringApplication.run(AdminApplication.class, args)方法 这个run方法主要做的事情可以分为三个部分 : 第一部分进行SpringApplication的初始化模块,配置一些基本的环境变量、资源、构造器、监听器 第二部分实现了应用具体的启动方案,包括启动流程的监听模块、加载配置环境模块、及核心的创建上下文环境模块 第三部分是自动化配置模块,该模块作为springboot自动配置核心,在后面的分析中会详细讨论
|
存储 Java 数据安全/隐私保护
SpringBoot整合Flowable【03】- 通过Flowable-UI体验一个简单流程
本文介绍了如何使用Flowable 7.0以下版本的flowable-ui进行流程建模、发布和执行。首先,通过解压并启动flowable-ui war包,访问http://localhost:8080/flowable-ui/idm/#/login登录系统。接着,创建并绘制一个简单的绩效流程模型,包含开始节点、任务节点(自评、上级评、隔级评)和结束节点,并为各节点分配处理人。然后,创建应用并发布绩效流程。最后,通过创建a、b、c三个用户分别完成各节点任务,演示了整个流程的执行过程。本文旨在帮助读者理解Flowable的基本操作和流程元素,后续将介绍通过Java代码控制流程的方法。
4952 2
SpringBoot整合Flowable【03】- 通过Flowable-UI体验一个简单流程
|
Java 数据库 开发者
详细介绍SpringBoot启动流程及配置类解析原理
通过对 Spring Boot 启动流程及配置类解析原理的深入分析,我们可以看到 Spring Boot 在启动时的灵活性和可扩展性。理解这些机制不仅有助于开发者更好地使用 Spring Boot 进行应用开发,还能够在面对问题时,迅速定位和解决问题。希望本文能为您在 Spring Boot 开发过程中提供有效的指导和帮助。
2506 12
|
XML 前端开发 Java
SpringBoot整合Flowable【04】- 通过代码控制流程流转
本文介绍了如何使用Flowable的Java API控制流程流转,基于前文构建的绩效流程模型。首先,通过Flowable-UI导出模型文件并部署到Spring Boot项目中。接着,详细讲解了如何通过代码部署、启动和审批流程,涉及`RepositoryService`、`RuntimeService`和`TaskService`等核心服务类的使用。最后,通过实际操作演示了流程从部署到完成的全过程,并简要说明了相关数据库表的变化。本文帮助读者初步掌握Flowable在实际业务中的应用,后续将深入探讨更多高级功能。
2522 0
SpringBoot整合Flowable【04】-  通过代码控制流程流转
|
IDE Java 应用服务中间件
spring boot 启动流程
Spring Boot 启动流程简介: 在使用 Spring Boot 之前,启动 Java Web 应用需要配置 Web 容器(如 Tomcat),并将应用打包放入容器目录。而使用 Spring Boot,只需运行 main() 方法即可启动 Web 应用。Spring Boot 的核心启动方法是 SpringApplication.run(),它负责初始化和启动应用上下文。 主要步骤包括: 1. **应用启动计时**:使用 StopWatch 记录启动时间。 2. **打印 Banner**:显示 Spring Boot 的 LOGO。 3. **创建上下文实例**:通过反射创建
953 5
|
前端开发 Java API
SpringBoot整合Flowable【07】- 驳回节点任务
本文通过绩效流程的业务场景,详细介绍了如何在Flowable工作流引擎中实现任务驳回功能。具体步骤包括:获取目标任务节点和当前任务节点信息,进行必要的判空和逻辑校验,调用API完成节点回退,并清理相关脏数据(如历史任务和变量)。最后通过测试验证了驳回功能的正确性,确保流程能够成功回退到指定节点并清除中间产生的冗余数据。此功能在实际业务中非常有用,能够满足上级驳回自评等需求。
3149 0
SpringBoot整合Flowable【07】- 驳回节点任务
|
10月前
|
JavaScript Java 关系型数据库
基于springboot的项目管理系统
本文探讨项目管理系统在现代企业中的应用与实现,分析其研究背景、意义及现状,阐述基于SSM、Java、MySQL和Vue等技术构建系统的关键方法,展现其在提升管理效率、协同水平与风险管控方面的价值。