spring boot整合flowable(分库)

资源地址

github : https://github.com/flowable/flowable-engine

flowable是什么

flowable是流程管理开源解决方案,从Activiti中分离出来的;由原 Activiti 的核心开发团队创建,旨在提供一个更加轻量级、更专注于核心业务流程管理的解决方案。flowable仅仅关注流程怎么走,不关心流程状态变化,更像一个代码编排工具,数据的可见性,状态流转,操作权限等还是由业务实现。

整合

由于flowable自己的表有70多张,不适合与业务使用同一个库,这里使用分库部署

  • pom.xml
<projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.suozq</groupId><artifactId>workflow</artifactId><version>0.0.1-SNAPSHOT</version><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.18</version><relativePath/><!-- lookup parent from repository --></parent><properties><java.version>8</java.version><flowable.version>6.8.1</flowable.version><!-- 可选:锁定 MySQL 驱动版本 --><mysql.version>8.0.33</mysql.version></properties><dependencies><!-- Web 支持 --><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><!-- MySQL 驱动 --><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope></dependency><!-- (可选)Actuator 监控 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><!-- (可选)Lombok 简化代码 --><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></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><excludes><exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></exclude></excludes></configuration></plugin></plugins></build></project>
  • application.yml
spring:datasource:url: jdbc:mysql://localhost:3306/biz_db?characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=trueusername: root password: root driver-class-name: com.mysql.cj.jdbc.Driver flowable:database-schema-update:truedatasource:jdbc-url: jdbc:mysql://localhost:3306/flowable_db?useSSL=false&nullCatalogMeansCurrent=true&serverTimezone=Asia/Shanghai&characterEncoding=utf8username: root password: root driver-class-name: com.mysql.cj.jdbc.Driver activity-font-name:"宋体"annotation-font-name:"宋体"label-font-name:"宋体"
database-schema-update :true : 启动时检测是否有flowable相关表,没有创建,有就校验;false: 启动时不创建表,生产环境;create-drop:启动时创建,关闭时删除,测试环境;drop-create:启动时先删除再创建,测试环境;
  • FlowableConfig.java
packagecom.suozq.workflow.config;importjavax.sql.DataSource;importorg.flowable.app.spring.SpringAppEngineConfiguration;importorg.flowable.spring.boot.EngineConfigurationConfigurer;importorg.flowable.spring.boot.ProcessEngineAutoConfiguration;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.boot.autoconfigure.condition.ConditionalOnProperty;importorg.springframework.boot.context.properties.ConfigurationProperties;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;importorg.springframework.context.annotation.Import;importorg.springframework.jdbc.datasource.DataSourceTransactionManager;importorg.springframework.lang.NonNull;importorg.springframework.transaction.PlatformTransactionManager;importcom.zaxxer.hikari.HikariDataSource;@ConfigurationpublicclassFlowableConfigimplementsEngineConfigurationConfigurer<SpringAppEngineConfiguration>{@Bean@ConfigurationProperties(prefix ="flowable.datasource")@NonNullpublicDataSourceflowableDataSource(){DataSource dataSource =newHikariDataSource();return dataSource;}/** * 配置Flowable专用事务管理器 * * @param flowableDataSource Flowable数据源 * @return Flowable事务管理器 */@BeanpublicPlatformTransactionManagerflowableTransactionManager(){returnnewDataSourceTransactionManager(flowableDataSource());}@Overridepublicvoidconfigure(SpringAppEngineConfiguration engineConfiguration){ engineConfiguration.setDataSource(flowableDataSource()); engineConfiguration.setTransactionManager(flowableTransactionManager());}}
  • FlowableServiceExample.java
@ServicepublicclassFlowableServiceExample{@AutowiredprivateRepositoryService repositoryService;// 流程定义管理@AutowiredprivateRuntimeService runtimeService;// 运行时流程实例@AutowiredprivateTaskService taskService;// 任务管理@AutowiredprivateHistoryService historyService;// 历史数据@AutowiredprivateManagementService managementService;// 引擎管理@AutowiredprivateDynamicBpmnService dynamicBpmnService;// 动态修改// 1. 部署流程定义publicDeploymentdeployProcess(){return repositoryService.createDeployment().addClasspathResource("processes/leave.bpmn20.xml").name("请假流程").deploy();}// 2. 启动流程实例publicProcessInstancestartProcess(String processKey,Map<String,Object> variables){return runtimeService.startProcessInstanceByKey( processKey, variables);}// 3. 查询publicList<Task>getUserTasks(String userId){return taskService.createTaskQuery().taskAssignee(userId).active().list();}//完成任务publicvoidcompleteTask(String taskId,Map<String,Object> variables){ taskService.complete(taskId, variables);}// 4. 历史数据查询publicList<HistoricProcessInstance>getProcessHistory(){return historyService.createHistoricProcessInstanceQuery().finished().orderByProcessInstanceEndTime().desc().list();}}

前端

从github下载整个压缩包后,里面有flowable-ui.war, 在同级目录下,添加application.properties配置文件,配置数据库为上面的flowable_db,

server.port=8081 spring.datasource.url=jdbc:mysql://127.0.0.1:3306/flowable_db?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai spring.datasource.username=root spring.datasource.password=root spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver flowable.database-schema-update=false
在这里插入图片描述

使用java -jar flowable-ui.war 命令启动,即可通过页面配置流程;配置好后,创建应用,关联流程,发布,即可在程序中使用该流程了;

坑点

  1. 启动报错no flowable tables in dbTable 'xxxx.act_ge_property' doesn't exist
这种情况多主要原因就是flowable判断表是否存在的语句有漏洞,没有明确指定库名!相同物理库下,一旦也有flowable的表,就会认为表已经创建!

解决方案(仅限MySQL): 数据库url 添加参数&nullCatalogMeansCurrent=true
该参数代表如果不指定库名,则自动使用当前库名

flowable-ui 官方包中没有mysql驱动

这真挺坑的,没有mysql驱动,打个包放这儿干啥?直接往里放驱动,还会因为压缩程序问题,导致整个包都不能用! 反正我尝试了很多方式,都没有成功把驱动加入,要么就是配置外置包,要么就通过源码编译,我这里使用源码编译
flowable-ui.war
账密:admin/test

Read more

从千毫秒到亚毫秒:连接条件下推如何让复杂 SQL 飞起来

从千毫秒到亚毫秒:连接条件下推如何让复杂 SQL 飞起来

文章目录 * 前言 * 一、问题背景 * 1.1 客户场景中的典型痛点 * 1.2 业界普遍面临的两大难点 * 1.2.1 语义安全性(Equivalence) * 1.2.2 代价评估(Cost) * 二、传统方案的局限 * 三、金仓数据库基于代价的连接条件下推设计 * 3.1 能不能推:等价性判定(Equivalence) * 3.2 值不值推:代价模型(Cost) * 四、效果验证 * 4.1 最小化用例 * 4.2 复杂场景验证 * 五、总结 前言 在真实的业务系统中,SQL 往往远比教科书示例复杂。随着业务逻辑的不断演进,CTE、

By Ne0inhk
最新Spring Security实战教程(十七)企业级安全方案设计 - 多因素认证(MFA)实现

最新Spring Security实战教程(十七)企业级安全方案设计 - 多因素认证(MFA)实现

🌷 古之立大事者,不惟有超世之才,亦必有坚忍不拔之志 🎐 个人CSND主页——Micro麦可乐的博客 🐥《Docker实操教程》专栏以最新的Centos版本为基础进行Docker实操教程,入门到实战 🌺《RabbitMQ》专栏19年编写主要介绍使用JAVA开发RabbitMQ的系列教程,从基础知识到项目实战 🌸《设计模式》专栏以实际的生活场景为案例进行讲解,让大家对设计模式有一个更清晰的理解 🌛《开源项目》本专栏主要介绍目前热门的开源项目,带大家快速了解并轻松上手使用 ✨《开发技巧》本专栏包含了各种系统的设计原理以及注意事项,并分享一些日常开发的功能小技巧 💕《Jenkins实战》专栏主要介绍Jenkins+Docker的实战教程,让你快速掌握项目CI/CD,是2024年最新的实战教程 🌞《Spring Boot》专栏主要介绍我们日常工作项目中经常应用到的功能以及技巧,代码样例完整 🌞《Spring Security》专栏中我们将逐步深入Spring Security的各个技术细节,带你从入门到精通,全面掌握这一安全技术 如果文章能够给大家带来一定的帮助!欢迎关注、评

By Ne0inhk
KingbaseES数据库:用 ksql 实现本地库创建 / 查看 / 切换 / 删除(附避坑技巧)

KingbaseES数据库:用 ksql 实现本地库创建 / 查看 / 切换 / 删除(附避坑技巧)

KingbaseES数据库:用 ksql 实现本地库创建 / 查看 / 切换 / 删除(附避坑技巧) 本文围绕本地 KingbaseES 数据库的全生命周期操作展开,先明确操作前的关键前提 —— 根据不同兼容模式确认 “权限库”(普通模式连任意已存库,SQLServer 兼容模式需连 master 库),并通过 \du 命令核查用户是否具备 CREATEDB 权限。核心讲解两种创建方式:推荐用 CREATE DATABASE 语句自定义编码、表空间等配置,也可通过 createdb 工具在系统终端快速创建。后续依次介绍 \l 查看所有库列表、\l + 查单库详情、\c 切换库的方法,强调切换前需提交事务避免数据回滚。删除操作重点提醒需先切换至其他库,建议加 IF EXISTS 选项,并做好数据备份以防丢失。最后针对权限不足、数据库被占用等高频报错,给出具体排查解决步骤,

By Ne0inhk
Flutter 组件 angel3_orm_mysql 的适配 鸿蒙Harmony 实战 - 驾驭专业 ORM 映射引擎、实现鸿蒙端与 MySQL 数据库的透明映射与高性能 SQL 审计方案

Flutter 组件 angel3_orm_mysql 的适配 鸿蒙Harmony 实战 - 驾驭专业 ORM 映射引擎、实现鸿蒙端与 MySQL 数据库的透明映射与高性能 SQL 审计方案

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 组件 angel3_orm_mysql 的适配 鸿蒙Harmony 实战 - 驾驭专业 ORM 映射引擎、实现鸿蒙端与 MySQL 数据库的透明映射与高性能 SQL 审计方案 前言 在鸿蒙(OpenHarmony)生态向企业级中台应用、大屏数字化面板、以及需要直接操作中心数据库的特定内网管理工具拓展时,“数据库连接与对象关系映射(ORM)”是构建数据闭环的关键桥梁。虽然移动端通常通过 API 与后端交互。但在某些高性能、低延迟的私有云场景下(如:工厂本地监控大屏)。鸿蒙端需要直接与 MySQL 建立高压连接。并实现从 SQL 表结构到 Dart 实体的自动转换。 如果手动编写繁琐的 SELECT * 语句并逐字段进行 Map

By Ne0inhk