网站首页 > 精选教程 正文
前言
前一节我们介绍了如何在Spring Boot 中配置多数据源,本节我们将介绍在MyBatis-Plus 中多数据源的配置方式。
MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
官网地址:MyBatis-Plus
多数据源
多数据源既动态数据源,项目开发逐渐扩大,单个数据源、单一数据源已经无法满足需求项目的支撑需求。我们开发的阅读平台项目同时连接多个数据库,比如:用户数据库 和 书籍数据库,就要用到动态数据源技术。
dynamic-datasource的功能
支持 数据源分组 ,适用于多种场景 纯粹多库 读写分离 一主多从 混合模式。
支持数据库敏感配置信息 加密 ENC()。
支持每个数据库独立初始化表结构schema和数据库database。
支持无数据源启动,支持懒加载数据源(需要的时候再创建连接)。
支持 自定义注解 ,需继承DS(3.2.0+)。
提供并简化对Druid,HikariCp,BeeCp,Dbcp2的快速集成。
提供对Mybatis-Plus,Quartz,ShardingJdbc,P6sy,Jndi等组件的集成方案。
提供 自定义数据源来源 方案(如全从数据库加载)。
提供项目启动后 动态增加移除数据源 方案。
提供Mybatis环境下的 纯读写分离 方案。
提供使用 spel动态参数 解析数据源方案。内置spel,session,header,支持自定义。
支持 多层数据源嵌套切换 。(ServiceA >>> ServiceB >>> ServiceC)。
提供 **基于seata的分布式事务方案。
提供 本地多数据源事务方案。
引入依赖
<!-- mybatis-plus 多数据源 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>3.5.0</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.2</version>
</dependency>
<!--mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.21</version>
</dependency>
配置多个数据源
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
dynamic:
primary: user #设置默认的数据源或者数据源组,默认值即为user
strict: false #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源
datasource:
user:
driver-class-name: com.mysql.cj.jdbc.Driver # 3.2.0开始支持SPI可省略此配置
url: jdbc:mysql://127.0.0.1:3306/user?zeroDateTimeBehavior=convertToNull&autoReconnect=true&generateSimpleParameterMetadata=true
username: root
password: root
book:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/book?zeroDateTimeBehavior=convertToNull&autoReconnect=true&generateSimpleParameterMetadata=true
username: root
password: root
druid:
# 初始化大小,最小,最大
initial-size: 10
min-idle: 10
max-active: 64
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位毫秒
time-between-eviction-runs-millis: 60000
# 配置一个连接在池中最小生存时间
min-evictable-idle-time-millis: 300000
validation-query: select 1
test-while-idle: true
test-on-borrow: false
test-on-return: false
pool-prepared-statements: true
# 配置获取连接等待超时的时间
max-wait: 60000
# 多主多从 纯粹多库(记得设置primary) 混合配置
spring: spring: spring:
datasource: datasource: datasource:
dynamic: dynamic: dynamic:
datasource: datasource: datasource:
master_1: mysql: master:
master_2: oracle: slave_1:
slave_1: sqlserver: slave_2:
slave_2: postgresql: oracle_1:
slave_3: h2: oracle_2:
3.使用@DS注解标识
@DS 可以注解在方法上或类上,同时存在就近原则 方法上注解 优先于 类上注解。
注解 | 结果 |
没有@DS | 默认数据源 |
@DS("dsName") | dsName可以为组名也可以为具体某个库的名称 |
使用 @DS("user") 连接 user 数据库
@DS("user")
public interface UserInfoMapper extends BaseMapper<UserInfoDO> {
}
使用 @DS("book") 连接 book 数据库
@DS("book")
public interface BookInfoMapper extends BaseMapper<BookInfoDO> {
}
@DS 作用在Service 上
@Service
@DS("user_master")
public class UserServiceImpl implements UserService {
@Autowired
private JdbcTemplate jdbcTemplate;
public List selectAll() {
return jdbcTemplate.queryForList("select * from user");
}
@Override
@DS("user_salve")
public List selectByCondition() {
return jdbcTemplate.queryForList("select * from user where age >10");
}
}
猜你喜欢
- 2024-12-03 SpringBoot 动态多数据源及事务解决方案
- 2024-12-03 如何在Spring Boot中整合Druid数据源配置?
- 2024-12-03 连微服务Nacos配置中心都不了解,那你可能注定就是个码农
- 2024-12-03 Spring Boot 2.x基础教程:默认数据源Hikari的配置详解
- 2024-12-03 Spring Boot 2.5 终于对数据源动刀了
- 2024-12-03 mysql和neo4j集成多数据源和事务
- 2024-12-03 MyBatis整合Springboot多数据源实现
- 2024-12-03 ShardingSphere-Proxy分库分表以及多租户安装使用
- 2024-12-03 手把手教你玩多数据源动态切换
- 2024-12-03 若依开发框架解析笔记(5)-多数据源的应用
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)