基于springboot的多数据源配置
概述
详细
一、前言
本篇demo实现了springboot项目实现了多数据源切换的功能。对一些有多个数据库的项目来说是一个很好的参考。
关于动态数据源的切换的方案有很多,核心只有两种。一种是构建多套环境,另一种是基于spring原生的 AbstractRoutingDataSource 切换。如果你的数据源较少,场景不复杂,选择以上任意一种都可以。如果你需要更多特性,可以参考本demo。
二、实现过程(使用方法)
引入dynamic-datasource-spring-boot-starter。
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>${version}</version>
</dependency>
2.配置数据源。
spring:
datasource:
dynamic:
datasource:
master:
username: root
password: root
url: jdbc:mysql://localhost/master?characterEncoding=utf-8&useSSL=true&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&serverTimezone=GMT%2b8
driver-class-name: com.mysql.jdbc.Driver
slave:
username: root
password: root
url: jdbc:mysql://localhost/slave?characterEncoding=utf-8&useSSL=true&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&serverTimezone=GMT%2b8
driver-class-name: com.mysql.jdbc.Driver
3.使用 @DS 切换数据源
@DS 可以注解在方法上和类上,同时存在方法注解优先于类上注解。
注解在service实现或mapper接口方法上,但不建议同时在service和mapper注解。
package com.zxh.service.impl; import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.zxh.entity.User;
import com.zxh.mapper.UserMapper;
import com.zxh.service.UserService; import org.springframework.stereotype.Service; @Service
@DS("slave")
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService { @Override
@DS("master")//这里必须包一层,不能调用mp默认的插入,因为会走到从库去
public void addUser(User user) {
baseMapper.insert(user);
} @Override
@DS("slave")
public User selectSlaveUser(Long id) {
return baseMapper.selectById(id);
}
}
4.集成mybatis-plus
只要进入mybatisPlus相关jar包,项目自动集成。 兼容mybatisPlus 2.x和3.x的版本。
只要注解在mybatisPlus的mapper或serviceImpl上即可完成mp内置方法切换。
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>2.3.1</version>
</dependency>
5.在本地的mysql分别建master跟slave两个数据库


6.在两个数据库分别建user表,表结构如下:

7.项目演示:

a).执行testAddUser
@Test
public void testAddUser() {
User user = new User();
user.setName("测试用户" + random.nextInt());
user.setAge(random.nextInt(100));
userService.addUser(user);
}
@Override
@DS("master")//这里必须包一层,不能调用mp默认的插入,因为会走到从库去
public void addUser(User user) {
baseMapper.insert(user);
}
因为我们在addUser里加了@DS("master")注解,所以会走到主库里面,可以看到master数据库插了一条记录:

b).执行testSelectById,slave数据库里面有一条数据如下:

@Test
public void testSelectById() {
User user = userService.selectSlaveUser(2L);
System.out.println(user.getName());
}
执行后结果,可以看到后台打印了用户名

这样就实现了动态加载多数据源的效果。
三、项目结构图

三、常见问题
多个库的事物如何处理?
不能 不能 不能,一个业务操作涉及多个库不要加事务。
注:本文著作权归作者,由demo大师发表,拒绝转载,转载需要作者授权
基于springboot的多数据源配置的更多相关文章
- springboot+ibatis 多数据源配置
这个是boot基本版本包,因为我用的打包方式是war所以去除掉了boot内置的tomcat,但是为了方便测试又引入了内置tomcat,只要添加<scope>provided</sco ...
- springboot之多数据源配置JdbcTemplate
springboot多数据源配置,代码如下 DataSourceConfig package com.rookie.bigdata.config; import org.springframework ...
- SpringBoot 的多数据源配置
最近在项目开发中,需要为一个使用 MySQL 数据库的 SpringBoot 项目,新添加一个 PLSQL 数据库数据源,那么就需要进行 SpringBoot 的多数据源开发.代码很简单,下面是实现的 ...
- springboot mybatis 多数据源配置
首先导入mybatis等包,这里就不多说. 下面是配置多数据源和mybatis,每个数据源对应一套mybatis模板 数据源1: package com.aaaaaaa.config.datasour ...
- Springboot+Druid 动态数据源配置监控
一.引入maven依赖,使用 starter 与原生 druid 依赖配置有所不同 <dependency> <groupId>com.alibaba</groupId& ...
- springboot mybatis 多数据源配置支持切换以及一些坑
一 添加每个数据源的config配置,单个直接默认,多个需要显示写出来 @Configuration @MapperScan(basePackages ="com.zhuzher.*.map ...
- SpringBoot:阿里数据源配置、JPA显示sql语句、格式化JPA查询的sql语句
1 数据源和JPA配置 1.1 显示sql配置和格式化sql配置 者两个配置都是属于hibernate的配置,但是springdatajpa给我们简化了:所有hibernate的配置都在jpa下面的p ...
- SpringBoot项目多数据源配置
博主总结的不错,事务也考虑到了,存一下: https://blog.csdn.net/xqnode/article/details/86498507
- 基于注解实现SpringBoot多数据源配置
1.功能介绍 在实际的开发中,同一个项目中使用多个数据源是很常见的场景.最近在学习的过程中使用注解的方式实现了一个Springboot项目多数据源的功能.具体实现方式如下. 2.在applicatio ...
随机推荐
- C++ 变量默认初始值不确定(代码测试)
C++ int变量默认初始值是不确定的,因此使用时初始化是很有必要的. 下面写个小程序测试一下int变量默认初始值. #include <iostream> #include <ve ...
- tmux 终端分屏利器使用
介绍 Tmux 是一个工具,用于在一个终端窗口中运行多个终端会话. 不仅如此,你还可以通过 Tmux 使终端会话运行于后台或是按需接入.断开会话,这个功能非常实用. 很好的工具,记录一下,以后要常用. ...
- [leetcode]Gas Station @ Python
原题地址:https://oj.leetcode.com/problems/gas-station/ 题意: There are N gas stations along a circular rou ...
- Commands to help you to Start Using ScaleIO Storage
To start using your storage: Log in to the MDM: scli --login --username admin --password <passwor ...
- Android 混合式开发AppCan介绍
Android程序员开发已从最早的异常火热到现在已经逐渐趋向稳定,目前企业针对Android开发工程师的要求要求已逐步提高,现在想从众多的面试者中脱颖而出,必须打好坚实的代码基础. 今天为大家介绍一款 ...
- 在TensorFlow中基于lstm构建分词系统笔记
在TensorFlow中基于lstm构建分词系统笔记(一) https://www.jianshu.com/p/ccb805b9f014 前言 我打算基于lstm构建一个分词系统,通过这个例子来学习下 ...
- 个基于TensorFlow的简单故事生成案例:带你了解LSTM
https://medium.com/towards-data-science/lstm-by-example-using-tensorflow-feb0c1968537 在深度学习中,循环神经网络( ...
- 转:查看linux系统版本号
转自: http://blog.csdn.net/zhuying_linux/article/details/6859286 lsb_release -a
- C++ 第三课:常量转义字符
常量转义字符 以下的转义字符使普通字符表示不同的意义. 转义字符 描述 \' 单引号 \" 双引号 \\ 反斜杠 \0 空字符 \a 响铃 \b 后退 \f 走纸 \n 换行 \r 回车 \ ...
- j2ee数据库连接池配置大全
<!--web.xml begin--> <!--web.xml Spring ApplicationContext配置文件的路径 ,可使用通配符,多个路径用,号分隔 --> ...