一,引言
在我们实际业务开发中,有时需要同时涉及多个数据库, 可能一个 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读取管理就好
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)