MyBatis-Plus 多数据源配置

MyBatis-Plus 多数据源配置,第1张

一,引言

在我们实际业务开发中,有时需要同时涉及多个数据库, 可能一个 API 中所需要的数据,往往是包含了多个数据库中的数据,这个时候我们就需要在项目运行中,切换数据源

二,具体实现

步骤一:我们先需要引入maven配置,版本可自选。dynamic-datasource-spring-boot-starter 是一个基于springboot的快速集成多数据源的启动器。

步骤二:多数据源配置,需要注意的后面都有写注释。

步骤三:步骤三就可以直接使用啦,真的是太方便了, @DS 可以注解在方法上或类上, 同时存在就近原则 方法上注解 优先于 类上注解

官方建议:

1,本框架只做 切换数据源 这件核心的事情,并不限制你的具体 *** 作,切换了数据源可以做任何CRUD。

2,配置文件所有以下划线 _ 分割的数据源 首部 即为组的名称,相同组名称的数据源会放在一个组下。

3,切换数据源可以是组名,也可以是具体数据源名称。组名则切换时采用负载均衡算法切换。

4,默认的数据源名称为 master ,你可以通过 spring.datasource.dynamic.primary 修改。

方法上的注解优先于类上注解。

5,强烈建议只在service的类和方法上添加注解,不建议在mapper上添加注解。

这里使用的是dynamic-datasource-spring-boot-starter ,它是一个基于springboot的快速集成多数据源的启动器。

1.首先在pom文件引入dynamic-datasource-spring-boot-starter

2.application.yml配置文件内容如下:

上面的配置中从dynamic开始是有关多数据源的配置,primary用来配置主数据源也叫默认数据源,它的默认值是master,因此,如果不指定primary的话一定要有名为master的数据源。strict 是用来配置是否启用严格 模式,如果为true表示启用,此时如果没有匹配的数据源会抛出异常,如果为false则会使用默认数据源。datasource下面就是配置多数据源的信息了。

后面的mybatis-plus配置我主要是用来说明集成这个不会对mybatis-plus对配置产生影响,该怎么用mybatis-plus就继续怎么用。

3.使用@DS("要切换的数据源"),上面配置的test可以使用@DS("test")切换数据源

1.注解添加在dao.mapper上无效

2.注解添加到interface Service类上无效

3.注解添加到interface Service方法上无效

那么,此注解应该如何使用呢?

添加@DS注解到实现类或者实现类的方法上才可以

当注解添加到类上,意味着此类里的方法都使用此数据源;

当注解添加到方法上时,意味着此方法上使用的数据源优先级高于其他一切配置

常见问题:

1.不能使用事务,否则数据源不会切换,使用的还是是第一次加载的数据源 。

删除 *** 作多数据源的方法或者类、接口 上的 注解 @Transactional() 即可。

2.第一次加载的数据源之后,第二次(第三次...) *** 作其它数据源,如果数据源不存在,使用的还是第一次加载的数据源

3.数据源名称最好不要包含下滑线,下滑线的数据源切换不了

拓展-传播机制

造一个db.properties如下配置

jdbc.driver=com.mysql.jdbc.Driver

jdbc.url=jdbc:mysql://localhost:3306/db?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull

jdbc.username=root

jdbc.password=root

在spring配置中读取

<!-- 配置数据源,使用dbcp连接池 -->

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">

<property name="driverClassName" value="${jdbc.driver}"/>

<property name="url" value="${jdbc.url}"/>

<property name="username" value="${jdbc.username}"/>

<property name="password" value="${jdbc.password}"/>

<property name="maxActive" value="30"/>

<property name="maxIdle" value="5"/>

</bean>

用 spring管理线程池,mybits的各种映射也用spring读取管理就好


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11791756.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存