Flowable配置多数据源以及指定schema

news2024/11/22 19:49:21

异常反馈

如有问题可通过微信公众号“假装正经的程序员”反馈

为什么要多源

在项目的实际开发过程中通常会有两种常见的使用Flowable的方式,一种是以独立的服务提供工作流的能力,另一种是以Jar包的形式进行内部集成。

这两种方式各有利弊,具体如下:

独立服务形式

优点

  1. 独立部署,独立维护,后续的工作流升级不会影响到业务系统;
  2. 工作流由服务统一管理,便于后期的维护与业务迭代;

缺点

  1. 有额外的网络开销,对服务有一定的性能影响;
  2. 需要额外的资源去部署服务,需要强有力的保障服务的稳定性;
  3. 需要解决分布式的事务问题;

Jar包形式

优点

  1. 没有额外的网络开销,性能更佳;
  2. 不依赖于第三方服务,稳定性更好;
  3. 无需额外部署,节约资源;
  4. 服务内部集成了Jar包,事务问题简单化了;

缺点

  1. 后续的版本迭代影响面会辐射到业务;
  2. Jar集成后,后续工作流的业务迭代相对会更复杂,改动点会更多;

上述两种方案各有利弊,通常情况下独立服务的形式比较适合大公司,他们拥有相对完善的技术体系,能够保障服务的稳定性,同时对于业务的迭代频率也会更高。Jar包的形式比较适合相对规模较小、技术体系相对不够完善的公司,通常以面向B端业务为主,他们无法像C端业务那样保障独立服务的超高稳定性,通过技术手段来解决分布式事务的成本较高。

原因

在独立服务中,多数据源常用于不同业务调用方使用不同数据库的场景,通过不同数据库或同一个数据库不同的schema进行数据隔离,避免相互之间业务干扰。

在Jar包形式中,多数据源是为了将工作流的数据与业务的数据进行隔离,工作流的数据库独立配置,这样做的好处有很多,比如可以防止在业务操作过程中误操作了工作流相关的表、可将业务与工作流数据隔离便于问题排查(毕竟工作流本身的表也不少)等。

多源配置项

#数据源
workflow:
  datasource:
    url: jdbc:postgresql://XXXXX:5432/a?serverTimezone=UTC&nullCatalogMeansCurrent=true
    username: XXXXXX
    password: XXXXXX
    driverClass: org.postgresql.Driver

workflow2:
  datasource:
    url: jdbc:postgresql://XXXX:5432/b?serverTimezone=UTC&nullCatalogMeansCurrent=true
    username: XXXXXX
    password: XXXXXX
    driverClass: org.postgresql.Driver

构建多源Bean

@Configuration
public class DataSourceConfig {
    @Bean(name = "workflowDataSource")
    @Qualifier("workflowDataSource")
    @Primary
    @ConfigurationProperties(prefix = "workflow.datasource")
    public DataSource dataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        return dataSource;
    }

    @Bean(name = "workflowDataSource2")
    @Qualifier("workflowDataSource2")
    @ConfigurationProperties(prefix = "workflow2.datasource")
    public DataSource secDataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        return dataSource;
    }
}

自定义引擎配置以及指定Schema

@Slf4j
@Component
public class CustomEngineConfigurator implements EngineConfigurator {
    @Autowired
    @Qualifier("workflowDataSource")
    private DataSource workflowDataSource;

    public void beforeInit(AbstractEngineConfiguration engineConfiguration) {
        engineConfiguration.setDatabaseSchema("workflow");
        engineConfiguration.setDataSource(workflowDataSource);
    }

    @Override
    public void configure(AbstractEngineConfiguration engineConfiguration) {
    }

    @Override
    public int getPriority() {
        return 600000;
    }
}

Flowable设置引擎配置

@Configuration
public class FlowableConfig implements EngineConfigurationConfigurer<SpringAppEngineConfiguration>{

    @Autowired
    private CustomEngineConfigurator customEngineConfigurator;


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

注意点

JDBC上设置schema无效

jdbc:postgresql://hostname:port/database?currentSchema=your_schema

网上很多说可以通过“?currentSchema=your_schema”来修改schema,这方案在Flowable上行不通的,为什么呢?我们来看源码

原因

这儿就是为什么在配置中设置flowable.database-schema可以修改schema的原因

DbSqlSessionFactory是flowable包下的,它的schema有两个来源,一个是配置项,另一个是AbstractEngineConfiguration的schema,因此通过上述jdbc的设置是无效的;

JDBC上设置connectionMetadataDefaultSchema无效

jdbc:postgresql://XXXX/gmpcloud?serverTimezone=UTC&nullCatalogMeansCurrent=true&connectionMetadataDefaultSchema=workflow

从源码上大致看来可以通过connectionMetadataDefaultSchema来设置schema

原因

但是追踪代码会发现DbSqlSession的初始化走的是上面一个方法,不会设置connectionMetadataDefaultSchema属性,因此不会有值,不会生效

SpringAppEngineConfiguration

实现的是SpringAppEngineConfiguration而非SpringProcessEngineConfiguration等其他引擎配置,具体区别后续会专门讲

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1680544.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

暴力数据结构之二叉树(堆的相关知识)

1. 堆的基本了解 堆&#xff08;heap&#xff09;是计算机科学中一种特殊的数据结构&#xff0c;通常被视为一个完全二叉树&#xff0c;并且可以用数组来存储。堆的主要应用是在一组变化频繁&#xff08;增删查改的频率较高&#xff09;的数据集中查找最值。堆分为大根堆和小根…

购买商用ssl证书并在windows服务器IIS上配置https域名(案例为阿里云)

阿里云、华为云等各路云都有ssl证书购买&#xff0c;价格相差不大&#xff0c;操作也都差不多&#xff0c;请自行选择。 本文以阿里云操作为案例。 购买SSL证书 点击购买 付款买入 注意&#xff0c;如果自己搞起来有问题&#xff0c;阿里购买的时候建议选择申请协助服务。购买…

抖店商品详情API接口(店铺|标题|主图|价格|SKU属性等)

抖店商品详情API接口(店铺|标题|主图|价格|SKU属性等) 抖店商品详情API接口是指通过调用抖音开放平台提供的接口&#xff0c;获取抖店上商品的详细信息的方法。 抖店开放平台提供了一系列的接口&#xff0c;可以用于获取商品的基本信息、价格、库存、销量、评价等各种信息。以…

Python 全栈体系【四阶】(四十四)

第五章 深度学习 九、图像分割 3. 常用模型 3.4 DeepLab 系列 3.4.3 DeepLab v3&#xff08;2017&#xff09; 在DeepLab v3中&#xff0c;主要进行了以下改进&#xff1a; 使用更深的网络结构&#xff0c;以及串联不同膨胀率的空洞卷积&#xff0c;来获取更多的上下文信…

利用管道通信(pipe)测量进程间的上下文切换(context switch)开销

利用管道通信(pipe)测量进程间的上下文切换(context switch)开销 《https://pages.cs.wisc.edu/~remzi/OSTEP/cpu-mechanisms.pdf》 Measuring the cost of a context switch is a little trickier. The lmbench benchmark does so by running two processes on a single CPU…

【LabVIEW FPGA入门】NI 环境安装教程

注意&#xff1a;安装软件之前关闭杀毒软件&#xff0c;避免安装时损坏&#xff0c;安装完成在使用杀毒软件。 步骤1&#xff1a;判断自己是否需要LabVIEW 编程。 下面这几种情况可以调过安装LabVIEW&#xff1a; 不需要LabVIEW或其他语言编程&#xff0c;直接在MAX或仪器软面板…

短视频素材该去哪里找?分享8个短视频剪辑必备的素材大全

在短视频创作与运营中&#xff0c;素材的找寻常常成为创作者的最头疼的事&#xff0c;因为它既要求不侵犯版权&#xff0c;又追求内容的优质性。然而&#xff0c;今天我要为大家揭晓一些剪辑短视频素材库的宝藏网站&#xff0c;它们将成为你创作旅程中的得力帮手&#xff0c;让…

动态手势识别(VGG11)

学校的大作业要做一个视频图像处理相关的&#xff0c;就做了动态手势识别 VGG代码 import torch import torch.nn as nnclass VGG_11_3D(nn.Module):def __init__(self, num_classes, pretrainedFalse):super(VGG_11_3D, self).__init__()self.conv1 nn.Conv3d(3, 64, kernel…

猫狗分类识别①将文件夹中图像统一转化为某一固定格式

一、 导入库 pip install Image 二、确保库中存在Image库&#xff0c;可以在Terminal或控制台中查看 pip list 三、图像后缀处理 import os from PIL import Image def convert_to_png(input_folder, output_folder):if not os.path.exists(output_folder):os.makedirs(outp…

虚拟机安装麒麟系统

官网&#xff1a;https://www.kylinos.cn/ 系统&#xff1a;银河麒麟高级服务器操作系统V10&#xff08;Kylin-Server-10-8.2&#xff09; 安装介质&#xff1a;虚拟机 兼容版下载地址&#xff1a; https://distro-images.kylinos.cn:8802/web_pungi/download/share/phHF6x7rta…

一物一码数字化营销进军调味品行业,五丰黎红“星厨俱乐部”火啦!

近日&#xff0c;由五丰黎红联合纳宝科技精心打造的小程序“星厨俱乐部”火啦&#xff01;一经上线就吸引了大量用户注册和参与&#xff0c;可以说取得了非常成功的市场反馈&#xff0c;那究竟是一个什么样的小程序&#xff0c;竟然有这么大的吸引力呢&#xff1f; 介绍小程序之…

【Mysql数据库进阶02】第一范式~第四范式 Normal Form

第一范式~第四范式Normal Form 0 引言1 第一范式2 第二范式3 第三范式4 BC范式5 第四范式总结 0 引言 因为软考&#xff0c;我又重新拾起了数据库&#xff0c;那么到底如何去判断它属于第几范式呢 1 第一范式 设R是一个关系模式&#xff0c;R属于第一范式当且仅当R中每一个…

P8805 [蓝桥杯 2022 国 B] 机房

P8805 [蓝桥杯 2022 国 B] 机房 分析 是一道lca题目&#xff0c;可以直接套模板 前缀和处理点权 具体思路&#xff1a; 1.n台电脑用n-1条网线相连&#xff0c;任意两个节点之间有且仅有一条路径&#xff08;拆分成各自到公共祖先节点的路径——lca&#xff09;&#xff1b;…

MLP的代替:KAN

受柯尔莫哥洛夫-阿诺德表示定理的启发&#xff0c;作者提出柯尔莫哥洛夫-阿诺德网络&#xff08;KAN&#xff09;作为多层感知器&#xff08;MLP&#xff09;有前途的替代品。MLP 在节点&#xff08;“神经元”&#xff09;上具有固定的激活函数&#xff0c;而 KAN 在边&#x…

SAP CS07复制BOM简介

在比较大型的集团公司中会应用到这样一个场景,所有的BOM都是由总部研发统一管控,然后在下发到下属的工厂进行生产,当发生变更的时候BOM也是会随之进行变更。 同样的在相同的两家工厂中,使用的是一套的设计方案,并且当物料发起变更的时候BOM也要随之进行变更处理。 在对BO…

Linux程序开发(一):Linux基础入门安装和实操手册

Tips&#xff1a;"分享是快乐的源泉&#x1f4a7;&#xff0c;在我的博客里&#xff0c;不仅有知识的海洋&#x1f30a;&#xff0c;还有满满的正能量加持&#x1f4aa;&#xff0c;快来和我一起分享这份快乐吧&#x1f60a;&#xff01; 喜欢我的博客的话&#xff0c;记得…

C语言之旅:自定义类型(联合和枚举)

目录 一.联合体 1.1 联合体的声明 1.2 联合体的使用 1.3 为什么输出 4呢&#xff1f; 1.4 相同成员的结构体和联合体对比 1.5 联合体大小对比 1.6使用联合体判断大小端 二.枚举类型 2.1枚举类型的例举&#xff1a; 2.2枚举类型的优点 2.3 枚举类型的使用 在上篇文章中…

如何利用命令提示符列出文件?这里提供了几个实例供你参考

序言 什么命令可以用来列出目录中的文件&#xff1f;如何在命令提示符Windows 10/11中列出文件&#xff1f;很多人对这些问题感到困惑。在这篇文章中&#xff0c;我们详细解释了命令提示符列出文件的主题。 CMD&#xff08;命令提示符&#xff09;是一个功能强大的Windows内置…

Python学习之路 | Python基础语法(二)

Python3 面向对象 封装、继承、多态。 基础 类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。方法&#xff1a;类中定义的函数。类变量&#xff1a;类变量在整个实例化的对象中是公用的。类变量定义在类中…

与禹老师学前端vue3学习汇总

24.5.15&#xff1a; 创建Vue3工程 1.确定自己电脑有没有nodejs环境&#xff0c;在cmd中输入node&#xff0c;如果出现Node.js的版本号说明已经有这个环境了&#xff0c;否则搜索Node.js安装 2.先在D盘创建一个文件夹Vue3_Study&#xff0c;然后在这个空文件夹中右键选择终端…