多数据源

您所在的位置:网站首页 Java多数据源配置时读取不到数据源 多数据源

多数据源

2024-07-11 13:21:43| 来源: 网络整理| 查看: 265

多数据源 ​

MyBaits-Flex 内置了功能完善的多数据源支持^1.0.6,不需要借助第三方插件或者依赖,开箱即用, 支持包括 druid、hikaricp、dbcp2、beecp 在内的任何数据源,MyBatis-Flex 多数据源配置如下:

yamlmybatis-flex: datasource: ds1: url: jdbc:mysql://127.0.0.1:3306/db username: root password: 123456 ds2: url: jdbc:mysql://127.0.0.1:3306/db2 username: root password: 123456

在以上配置中,ds1 和 ds2 是由用户自定义的,我们可以理解为数据源的名称,或者数据源的 key,这个在动态切换数据库中非常有用。

在无 Spring 框架的场景下,代码如下:

javaDataSource dataSource1 = new HikariDataSource(); dataSource1.setJdbcUrl(....) DataSource dataSource2 = new HikariDataSource(); dataSource2.setJdbcUrl(....) DataSource dataSource3 = new HikariDataSource(); dataSource3.setJdbcUrl(....) MybatisFlexBootstrap.getInstance() .setDataSource("ds1", dataSource1) .addDataSource("ds2", dataSource2) .addDataSource("ds3", dataSource3) .start();开始使用 ​

默认使用第一个配置的数据源:

javaList rows = Db.selectAll("tb_account"); System.out.println(rows);

通过编码的方式,切换到数据源 ds2:

javatry{ DataSourceKey.use("ds2") List rows = Db.selectAll("tb_account"); System.out.println(rows); }finally{ DataSourceKey.clear(); }

或者

javaList rows = DataSourceKey.use("ds2" , () -> Db.selectAll("tb_account"));数据源切换(设置) ​

MyBatis-Flex 提供了 4 种方式来配置数据源:

1、编码,使用DataSourceKey.use 方法。2、@UseDataSource("dataSourceName") 在 Mapper 类上,添加注解,用于指定使用哪个数据源。3、@UseDataSource("dataSourceName") 在 Mapper 方法上,添加注解,用于指定使用哪个数据源。4、@Table(dataSource="dataSourceName") 在 Entity 类上添加注解,该 Entity 的增删改查请求默认使用该数据源。

在 SpringBoot 项目上,@UseDataSource("dataSourceName") 也可用于在 Controller 或者 Service 上。若是 Spring 项目(非 SpringBoot), 用户需要参考 MultiDataSourceAutoConfiguration 进行配置后才能使用。

DataSourceKey.use 示例:

javatry{ DataSourceKey.use("ds2") List rows = Db.selectAll("tb_account"); System.out.println(rows); }finally{ DataSourceKey.clear(); }

@UseDataSource("dataSourceName") 示例:

java@UseDataSource("ds2") interface AccountMapper extends BaseMapper{ List myMethod(); }

或者

javainterface AccountMapper extends BaseMapper{ @UseDataSource("ds2") List myMethod(); }

@Table(dataSource="dataSourceName") 示例:

java@Table(value = "tb_account", dataSource = "ds2") public class Account { @Id(keyType = KeyType.Auto) private Long id; private String userName; }

数据源配置的优先级

DataSourceKey.use() > @UseDataSource()在方法上 > @UseDataSource()在类上 >@Table(dataSource="...")

更多的 Spring Yaml 配置支持 ​yamlmybatis-flex: datasource: ds1: url: jdbc:mysql://127.0.0.1:3306/db username: root password: 123456 ds2: url: jdbc:mysql://127.0.0.1:3306/db2 username: root password: 123456

在以上配置中,ds1 和 ds2 并未指定使用哪个数据连接池,MyBatis-Flex 会 自动探测 当前项目依赖了哪个连接池。 目前支持了 druid、hikaricp、dbcp2、beecp 的自动探测,如果项目中使用的不是这 4 种类型只有,需要添加 type 配置,如下所示:

yamlmybatis-flex: datasource: ds1: type: com.your.datasource.type1 url: jdbc:mysql://127.0.0.1:3306/db username: root password: 123456 ds2: type: com.your.datasource.type2 url: jdbc:mysql://127.0.0.1:3306/db2 username: root password: 123456

同时,项目若使用到了多个数据源类型,则也需要添加 type 来指定当前数据源的类型。

除了 type、url、username、password 的配置以外,MyBatis-Flex 支持该 DataSource 类型的所有参数配置, 例如,在 DruidDataSource 类中存在 setAsyncInit 方法,我们就可以添加 asyncInit 的配置,如下所示:

yamlmybatis-flex: datasource: ds1: type: druid url: jdbc:mysql://127.0.0.1:3306/db username: root password: 123456 asyncInit: true ds2: type: com.your.datasource.type2 url: jdbc:mysql://127.0.0.1:3306/db2 username: root password: 123456

因此,只要该 DataSource 有 setter 方法,我们就可以在配置文件中进行配。与此相反的是:若该 DataSource 类型没有该属性,则不能使用这个配置。

提示

在数据源的配置中,type 可以配置为某个 DataSource 的类名,也可以配置为别名,别名支持有:druid、 hikari、hikaricp、bee、beecp、dbcp、dbcp2。

动态添加新的数据源 ​

在多租户等某些场景下,我们可能需要用到动态的添加新的数据源,此时可以通过如下的方式进行添加。

javaFlexDataSource flexDataSource = FlexGlobalConfig.getDefaultConfig() .getDataSource(); //新的数据源 HikariDataSource newDataSource = new HikariDataSource(); flexDataSource.addDataSource("newKey", newDataSource);

需要注意的是: 通过 FlexGlobalConfig 去获取 FlexDataSource 时,需等待应用完全启动成功后,才能正常获取 FlexDataSource, 否则将会得到 null 值。

Spring 用户可以通过 ApplicationListener 去监听 ContextRefreshedEvent 事件,然后再去添加新的数据源,如下代码所示:

javapublic class DataSourceInitListener implements ApplicationListener { @Override public void onApplicationEvent(ContextRefreshedEvent event) { FlexDataSource dataSource = FlexGlobalConfig.getDefaultConfig() .getDataSource(); dataSource.addDataSource("....", new DruidDataSource("...")); } }多数据源负载均衡 ^1.5.4 ​

数据源负载均衡指的是:在进行数据查询的时候,随机使用一个数据源。 这是的在高并发的场景下,起到负载的效果。

假设多数据源配置如下:

yamlmybatis-flex: datasource: ds1: type: druid url: jdbc:mysql://127.0.0.1:3306/db username: root password: 123456 asyncInit: true ds2: type: com.your.datasource.type2 url: jdbc:mysql://127.0.0.1:3306/db2 username: root password: 123456 other: type: com.your.datasource.type2 url: jdbc:mysql://127.0.0.1:3306/db3 username: root password: 123456

以上配置了三个数据源,分别为:ds1、ds2、other,假设我们想负载均衡使用 ds1、ds2 ,那么代码如下:

javatry{ DataSourceKey.use("ds*"); List rows = Db.selectAll("tb_account"); System.out.println(rows); }finally{ DataSourceKey.clear(); }

DataSourceKey.use("ds*") 中的 ds* 指的是使用 ds 开头的任意一个数据源。ds* 必须以 "*" 结尾, 中间不能有空格,比如 "ds *" 中间有空格是不行的。



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭