Spring Boot 集成 Flowable 并自定义数据源

2023-10-30

永久链接:https://blog.kekwy.com/flowable-datasource/

问题描述

在使用 flowable-spring-boot-starter 进行 spring boot 集成 flowable 时,flowable 会使用配置文件中 spring.datasource 前缀下设置的数据源:

spring:
  datasource:
    type: com.zaxxer.hikari.HikariDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: datasource1
    username: xxxx
    password: xxxx

而项目中的其他数据库工具,如 mybatis 等,同样也会使用此数据源。由于 flowable 相关的表结构过多,该数据源我们只希望保存与项目业务相关的表结构,故尝试使 flowable 使用其他数据源(非默认,自定义)。

Spring Boot 版本:3.0.5

Flowable 版本:7.0.0.M1

相关依赖:

<!-- MySQL -->
<dependency>
  <groupId>com.mysql</groupId>
  <artifactId>mysql-connector-j</artifactId>
  <version>8.0.32</version>
  <scope>runtime</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.flowable/flowable-spring-boot-starter -->
<dependency>
  <groupId>org.flowable</groupId>
  <artifactId>flowable-spring-boot-starter</artifactId>
  <version>7.0.0.M1</version>
</dependency>

解决方案

首先在配置文件中添加我们自定义的数据源,前缀任意,不冲突即可:

flowable:
  datasource:
    type: com.zaxxer.hikari.HikariDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: datasource2
    username: xxxx
    password: xxxx

定义 org.flowable.common.engine.impl.EngineConfigurator 接口的一个实现类,读取配置文件信息并在 beforeInit 方法中创建数据源。使用 @Component 注解生成 bean:

@Component
public class DatasourceConfigurator implements EngineConfigurator {
    
    @Value("${flowable.datasource.url}")
    private String url;

    @Value("${flowable.datasource.type}")
    private Class<? extends DataSource> type;

    @Value("${flowable.datasource.driver-class-name}")
    private String driverClassName;

    @Value("${flowable.datasource.username}")
    private String username;

    @Value("${flowable.datasource.password}")
    private String password;

    
    @Override
    public void beforeInit(AbstractEngineConfiguration engineConfiguration) {
        DataSource dataSource = DataSourceBuilder.create()
                .type(type)
                .driverClassName(driverClassName)
                .url(url)
                .username(username)
                .password(password).build();
        engineConfiguration.setDataSource(dataSource);
    }

    @Override
    public void configure(AbstractEngineConfiguration engineConfiguration) {
    }

    @Override
    public int getPriority() {
        return 600000; // 保证该优先级最高
    }

}

定义一个配置类,实现接口 org.flowable.spring.boot.EngineConfigurationConfigurer。将 datasourceConfigurator 注入,在 configure 方法中将其加入 Flowable 引擎的上下文中。

@Configuration
public class ProcessEngineConfig implements EngineConfigurationConfigurer<SpringAppEngineConfiguration> {

    private DatasourceConfigurator datasourceConfigurator;

    @Autowired
    public void setDatasourceConfigurator(DatasourceConfigurator datasourceConfigurator) {
        this.datasourceConfigurator = datasourceConfigurator;
    }

    @Override
    public void configure(SpringAppEngineConfiguration engineConfiguration) {
        engineConfiguration.addConfigurator(datasourceConfigurator);
    }
    
}

观察日志发现我们自定义的配置成功地被 Flowable 引擎调用执行了:

image-20230426115352537

  • 在日志中还可以看到其他五个 Flowable 自动添加的 Configurator 和各自的优先级,优先级高的晚调用,相同配置高优先级会覆盖低优先级。故我们在定义自己的 Configurator 时需要设置一个比上述五个 Configurator 更高的优先级。
  • 实现接口 org.flowable.spring.boot.EngineConfigurationConfigurer 时,注意一定要使用 SpringAppEngineConfiguration 作为泛型参数。

至此,问题成功解决,欢迎大家指正。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring Boot 集成 Flowable 并自定义数据源 的相关文章

  • JavaMail Gmail 问题。 “准备启动 TLS”然后失败

    mailServerProperties System getProperties mailServerProperties put mail smtp port 587 mailServerProperties put mail smtp
  • 解决错误:日志已在具有多个实例的atomikos中使用

    我仅在使用atomikos的实时服务器上遇到问题 在我的本地服务器上它工作得很好 我在服务器上面临的问题是 init 中出错 日志已在使用中 完整的异常堆栈跟踪 java lang RuntimeException Log already
  • ExceptionConverter:java.io.IOException:文档没有页面。我正在使用 iText

    当我执行下面的代码时 File f new File c sample pdf PdfWriter getInstance document new FileOutputStream f document open System out p
  • Convert.FromBase64String 方法的 Java 等效项

    Java 中是否有相当于Convert FromBase64String http msdn microsoft com en us library system convert frombase64string aspx which 将指
  • 一种使用 Java Robot API 和 Selenium WebDriver by Java 进行文件上传的解决方案

    我看到很多人在使用 Selenium WebDriver 的测试环境中上传文件时遇到问题 我使用 selenium WebDriver 和 java 也遇到了同样的问题 我终于找到了解决方案 所以我将其发布在这里希望对其他人有所帮助 当我需
  • Clip 在 Java 中播放 WAV 文件时出现严重延迟

    我编写了一段代码来读取 WAV 文件 大小约为 80 mb 并播放该文件 问题是声音播放效果很差 极度滞后 你能告诉我有什么问题吗 这是我的代码 我称之为doPlayJframe 构造函数内的函数 private void doPlay f
  • 序列化对象以进行单元测试

    假设在单元测试中我需要一个对象 其中所有 50 个字段都设置了一些值 我不想手动设置所有这些字段 因为这需要时间而且很烦人 不知何故 我需要获得一个实例 其中所有字段都由一些非空值初始化 我有一个想法 如果我要调试一些代码 在某个时候我会得
  • Java中接口作为方法参数

    前几天去面试 被问到了这样的问题 问 反转链表 给出以下代码 public class ReverseList interface NodeList int getItem NodeList nextNode void reverse No
  • 如何将文件透明地传输到浏览器?

    受控环境 IE8 IIS 7 ColdFusion 当从 IE 发出指向媒体文件 例如 mp3 mpeg 等 的 GET 请求时 浏览器将启动关联的应用程序 Window Media Player 我猜测 IIS 提供文件的方式允许应用程序
  • 从 android 简单上传到 S3

    我在网上搜索了从 android 上传简单文件到 s3 的方法 但找不到任何有效的方法 我认为这是因为缺乏具体步骤 1 https mobile awsblog com post Tx1V588RKX5XPQB TransferManage
  • Spring Data 与 Spring Data JPA 与 JdbcTemplate

    我有信心Spring Data and Spring Data JPA指的是相同的 但后来我在 youtube 上观看了一个关于他正在使用JdbcTemplate在那篇教程中 所以我在那里感到困惑 我想澄清一下两者之间有什么区别Spring
  • 使用 AWS Java SDK 为现有 S3 对象设置 Expires 标头

    我正在更新 Amazon S3 存储桶中的现有对象以设置一些元数据 我想设置 HTTPExpires每个对象的标头以更好地处理 HTTP 1 0 客户端 我们正在使用AWS Java SDK http aws amazon com sdkf
  • 使用 SAX 进行 XML 解析 |如何处理特殊字符?

    我们有一个 JAVA 应用程序 可以从 SAP 系统中提取数据 解析数据并呈现给用户 使用 SAP JCo 连接器提取数据 最近我们抛出了一个异常 org xml sax SAXParseException 字符引用 是无效的 XML 字符
  • 当单元格内的 JComboBox 中有 ItemEvent 时,如何获取 CellRow

    我有一个 JTable 其中有一列包含 JComboBox 我有一个附加到 JComboBox 的 ItemListener 它会根据任何更改进行操作 但是 ItemListener 没有获取更改的 ComboBox 所在行的方法 当组合框
  • Java - 不要用 bufferedwriter 覆盖

    我有一个程序可以将人员添加到数组列表中 我想做的是将这些人也添加到文本文件中 但程序会覆盖第一行 因此这些人会被删除 如何告诉编译器在下一个空闲行写入 import java io import java util import javax
  • 将 JTextArea 内容写入文件

    我在 Java Swing 中有一个 JTextArea 和一个 提交 按钮 需要将textarea的内容写入一个带有换行符的文件中 我得到的输出是这样的 它被写为文件中的一个字符串 try BufferedWriter fileOut n
  • android Accessibility-service 突然停止触发事件

    我有一个 AccessibilityService 工作正常 但由于开发过程中的某些原因它停止工作 我似乎找不到这个原因 请看一下我的代码并告诉我为什么它不起作用 public class MyServicee extends Access
  • java迭代器内部是如何工作的? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一个员工列表 List
  • KeyPressed 和 KeyTyped 混淆[重复]

    这个问题在这里已经有答案了 我搜索过之间的区别KeyPressedand KeyTyped事件 但我仍然不清楚 我发现的一件事是 Keypressed 比 KeyTyped 首先被触发 请澄清一下这些事件何时被准确触发 哪个适合用于哪个目的
  • Jackson 将单个项目反序列化到列表中

    我正在尝试使用一项服务 该服务为我提供了一个带有数组字段的实体 id 23233 items name item 1 name item 2 但是 当数组包含单个项目时 将返回该项目本身 而不是包含一个元素的数组 id 43567 item

随机推荐

  • 牛客 NC202492 仓库选址

    题目链接 https ac nowcoder com acm problem 202492 代码 include
  • Chrome 谷歌浏览器 google 复制网页上禁止复制的文本

    在你要复制文字的页面 按F12 选择 Console 输入 document body innerText 然后按回车
  • 用python画一只可爱的皮卡丘

    效果图 usr bin env python coding utf 8 from turtle import 绘制皮卡丘头部 def face x y 画脸 begin fill penup 将海龟移动到指定的坐标 goto x y pen
  • Grafana中文版本

    grafana chinese tags GitHub grafana Grafana中文汉化版本 GitHub https github com WangHL0927 grafana chinese 作者 whl email w95866
  • Vuepress码云部署及自动跳转404 的问题

    介绍 VuePress 由两部分组成 一个以 Vue 驱动的主题系统的简约静态网站生成工具 和一个为编写技术文档而优化的默认主题 它是为了支持 Vue 子项目的文档需求而创建的 由 VuePress 生成的每个页面 都具有相应的预渲染静态
  • PyCharm+Docker:打造最舒适的深度学习炼丹炉

    点击上方 小白学视觉 选择加 星标 或 置顶 重磅干货 第一时间送达 来自 知乎 作者 刘震 链接 https zhuanlan zhihu com p 52827335 编辑 人工智能前沿讲习 一般炼丹都在服务器上 很少有人在本机跑代码的
  • 跨时钟域信号处理(一)--Verilog单比特信号

    网上有很多的跨时钟域信号处理的相关文章 主要分为三种 单比特信号 打两拍或打更多拍 使用触发器 多比特信号 异步双口块RAM或者异步FIFO 格雷码转换 这次就主要说第1种情况 适用于单比特信号 1 应用场景 从时钟域1的单比特信号DATA
  • 【python】动态规划算法学习:0-1背包问题 -牛客网HJ16 购物单

    这里写目录标题 题目HJ16 购物单 问题理解 代码 题目HJ16 购物单 描述 王强决定把年终奖用于购物 他把想买的物品分为两类 主件与附件 附件是从属于某个主件的 下表就是一些主件与附件的例子 主件 附件 电脑 打印机 扫描仪 书柜 图
  • Git(三) Git 图形化管理工具 SourceTree 全部实用操作

    Git 三 Git 图形化管理工具 SourceTree 全部实用操作 上篇文章主要说到Git的账号情况 Getlab账号和Github账号同时使用 本篇文章接着上篇内容继续为大家介绍 Git的图形化管理工具 SourceTree 前言 一
  • 文件下载中文文件名不显示

    使用response setHeader Content Disposition attachment filename fName 下载文件 中文文件名无法显示的问题 今天遇到这么一个情况 在Controller代码中进行文件下载 其中f
  • js 多个if else如何优化?

    function getUserDescribe name if name length gt 3 console log 名字太长 else if name length lt 2 console log 名字太短 else if nam
  • 导入时报错 :No module named ‘tensorflow.contrib‘ 问题的解决

    No module named tensorflow contrib 问题解决 问题描述 在tensorflow contrib模块的调用报错 No module named tensorflow contrib 解决方案 我给删了大不了不
  • [CISCN2019 华北赛区 Day1 Web2]ikun (JWT更改与python反序列化)

    前言 文章所涉及的资料来自互联网整理和个人总结 意在于个人学习和经验汇总 如有什么地方侵权 请联系本人删除 谢谢 本文仅用于学习与交流 不得用于非法用途 题目 提示是要买到Iv6 有很多页面 需要写脚本来找 import requests
  • 基于时间轮片方式处理超时任务

    作者 酱了里个酱 来源 掘金 https juejin im post 5e733e4f51882549417fe9aa 背景 最近收到小伙伴的一个吐槽 项目里的某个函数是同步阻塞的 无法确定其运行时间 某些情况下 可能出现长时间阻塞导致应
  • 计算机视觉与深度学习-全连接神经网络-激活函数- [北邮鲁鹏]

    文章目录 基础知识 为什么需要非线性操作 激活函数 激活函数 vs 数据预处理 常用的激活函数 Sigmoid函数 Logistic函数 双曲正切函数 Tanh函数 线性整流函数 ReLU函数 Leaky ReLU函数 Softmax函数
  • BTC txid与vote的关系

    当我通过BTC的listtransactions接口获取查询最近发生的钱包交易时 需要将用户的充值记录写到数据库时 发现了一些令人巨大的误解 例如 txid字段并不是唯一的 所以写到数据库时 会有交易哈希重复的可能性 有可能你的两个用户在币
  • python处理xml文件

    1 python 操作xml的方式介绍 查看全部包含 三种 法 是xml dom 模块 它是W3CDOMAPI的实现 若需要处理DOMAPI则该模块很适合 是xml sax 模块 它是SAXAPI的实现 这个模块牺牲了便捷性来换取速度和内存
  • matlab中varargout简介

    varargout可以看做 Variable length output argument list 的缩写 在matlab中定义m函数时通过 varargout我们可以得到可变个数个返回值 在matlab命令窗口中输入doc vararg
  • 【H5】Cookie、Session、Token、JWT区别及使用方法

    Token 和 Session 的区别 Session 是一种记录服务器和客户端会话状态的机制 使服务端有状态化 可以记录会话信息 而 Token 是令牌 访问资源接口 API 时所需要的资源凭证 Token 使服务端无状态化 不会存储会话
  • Spring Boot 集成 Flowable 并自定义数据源

    永久链接 https blog kekwy com flowable datasource 问题描述 在使用 flowable spring boot starter 进行 spring boot 集成 flowable 时 flowabl