随着企业对于业务流程管理需求的增加,流程引擎在企业信息化建设中的作用越来越重要。Flowable是一个开源的轻量级业务流程管理(BPM)和工作流引擎,它支持BPMN 2.0标准。
Flowable的一些特点:
- 安装集成:Flowable可以与Spring Boot等现代开发框架集成,提供了一套完整的工具和API来支持工作流的建表、设计和实施。
- 流程设计:使用Flowable,开发者可以构建符合BPMN 2.0规范的流程定义,这些流程定义可以通过流程设计器进行可视化设计,也可以通过XML或JSON格式的文件直接编辑。
- 流程实例管理:Flowable允许用户创建和管理流程实例,查询实例状态,以及在运行时对流程实例进行干预,如启动、暂停或终止实例。
- 数据访问:Flowable提供了访问流程相关数据的API,允许应用程序在流程执行过程中存取相关数据。
- 数据库支持:Flowable支持多种数据库,这使得它可以在不同的企业环境中灵活部署和使用。
- 社区文档:作为一个开源项目,Flowable拥有一个活跃的社区,提供丰富的文档和案例,帮助开发者学习和解决问题。
今天介绍的是springboot2.3版本集成flowable。
集成flowable
pom.xml中引入以下内容:
org.flowable flowable-spring-boot-starter ${flowable.version} org.flowable flowable-spring-boot-starter-ui-modeler ${flowable.version} org.flowable flowable-spring-boot-starter-ui-admin ${flowable.version} org.flowable flowable-spring-boot-starter-ui-idm ${flowable.version} org.flowable flowable-spring-boot-starter-ui-task ${flowable.version}
配置文件追加配置自动建表:
spring: datasource: url: jdbc:mysql://localhost:3306/tt?useSSL=false&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true username: root password: pass driverClassName: com.mysql.cj.jdbc.Driver flowable: async-executor-activate: false database-schema-update: true
默认会启动liquibase, 可关闭:
spring: liquibase: enabled: false
生成的表如下:
生成的表分别做什么用的
如果用过Activity的同学, 就会发现表名很多相同的, 但Flowable的表多了很多, 毕竟两者早期是同一个产品。表的功能一般可以通过第二个词语缩写来进行区分。
Flowable 生成的数据表主要用于支撑工作流引擎的运行和管理。这些表中包括但不限于以下几类:
- ACT_RE_: 以 “RE” 为前缀的表属于仓库服务(RepositoryService),它们主要存储与流程定义相关的静态信息,如流程定义、流程的资源(图片、规则等)。
- ACT_RU_: 以 “RU” 为前缀的表属于运行时服务(RuntimeService),存储着流程实例在执行期间的动态数据,包括流程变量、用户任务、变量、职责(job)等。
- ACT_ID_: 以 “ID” 为前缀的表与组织机构或用户身份有关,涉及用户、组和权限等信息。
- ACT_HI_: 是Flowable工作流引擎中使用的历史数据表。
- ACT_GE_:主要用于存储全局通用的数据和设置,这些数据在各种情况下都可能被使用
简单使用flowable
用户admin密码test:
简单绘制一个请假审批:
- 部门经理线的流条件:${day>1 && day
3]]>
部署这个a.bpmn20.xml文件:
@Test void test01() { // 配置数据库相关信息 获取 ProcessEngineConfiguration ProcessEngineConfiguration cfg = new StandaloneProcessEngineConfiguration() .setJdbcUrl("jdbc:mysql://localhost:3306/tt?serverTimezone=UTC&nullCatalogMeansCurrent=true") .setJdbcUsername("root") .setJdbcDriver("com.mysql.cj.jdbc.Driver") .setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE); // 获取流程引擎对象 ProcessEngine processEngine = cfg.buildProcessEngine(); // 部署流程 获取RepositoryService对象 RepositoryService repositoryService = processEngine.getRepositoryService(); Deployment deployment = repositoryService.createDeployment()// 创建Deployment对象 .addClasspathResource("a.bpmn20.xml") // 添加流程部署文件 .name("请假") // 设置部署流程的名称 .deploy(); // 执行部署操作 }
测试执行:
Map variables = new HashMap(); //days是流程图条件 variables.put("day", 3); ProcessInstance pi = runtimeService.startProcessInstanceByKey("a", variables); System.out.println(pi.getName());
我们分别调整day为1,3,5时,此时ACT_RU_TASK表(ACT_RU_TASK表存储了运行时的用户任务数据)中将有三条数据:
- 部门经理线的流条件:${day>1 && day
3]]>