如何在Java SpringBoot項目中配置動態(tài)數(shù)據(jù)源你知道嗎
在我們工作中涉及到一些場景需要我們配置多數(shù)據(jù)源的操作,之前來說我們配置數(shù)據(jù)源需要寫繁瑣的配置類來配置我們的數(shù)據(jù)源,哪個是默認(rèn)數(shù)據(jù)源等等,而現(xiàn)在我們可以使用“苞米豆”為我們提供的提供的第三方工具,只需要簡單配置就可以實現(xiàn)多數(shù)據(jù)源之間的靈活切換了!
首先需要引入第三方依賴
<dependency> <groupId>com.baomidou</groupId> <artifactId>dynamic-datasource-spring-boot-starter</artifactId> <version>3.3.5</version> </dependency>
只需要在配置文件中按照如下配置
spring: datasource: dynamic: primary: master #設(shè)置默認(rèn)的數(shù)據(jù)源或者數(shù)據(jù)源組,默認(rèn)值即為master strict: false #嚴(yán)格匹配數(shù)據(jù)源,默認(rèn)false. true未匹配到指定數(shù)據(jù)源時拋異常,false使用默認(rèn)數(shù)據(jù)源 datasource: master: # 名稱可以自己定義 url: jdbc:mysql://localhost:3306/students?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8 username: root password: root driver-class-name: com.mysql.cj.jdbc.Driver slave: # 名稱可以自己定義 url: jdbc:mysql://localhost:3306/teachers?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8 username: root password: root driver-class-name: com.mysql.cj.jdbc.Driver
創(chuàng)建如下兩個數(shù)據(jù)庫
entity
@Data public class Student implements Serializable { /** * 主鍵 */ private Integer id; /** * 姓名 */ private String name; /** * 年齡 */ private Integer age; /** * 性別 */ private String sex; private static final long serialVersionUID = 1L; }
@Data public class Teacher implements Serializable { /** * 主鍵 */ private Integer id; /** * 姓名 */ private String name; /** * 年齡 */ private Integer age; /** * 學(xué)科 */ private String subject; private static final long serialVersionUID = 1L; }
mapper.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.example.demo.mysql.mapper.StudentDao"> <select id="findAllStudent" resultType="com.example.demo.entity.Student"> select * from student; </select> </mapper>
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.example.demo.mysql.mapper.TeacherDao"> <select id="findAllTeacher" resultType="com.example.demo.entity.Teacher"> select * from teacher; </select> </mapper>
mapper層
@Mapper public interface StudentDao { List<Student> findAllStudent(); }
@Mapper public interface TeacherDao { List<Teacher> findAllTeacher(); }
Service層
@Service public class StudentServiceImpl implements StudentService { @Autowired private StudentDao studentDao; @Override public List<Student> findAllStudent() { return studentDao.findAllStudent(); }
@Service @DS("slave") public class TeacherServiceImpl implements TeacherService { @Autowired private TeacherDao teacherDao; @Override public List<Teacher> findAllTeacher() { return teacherDao.findAllTeacher(); } }
下面是兩個測試方法
@RestController public class TestController { @Autowired private StudentService studentService; @Autowired private TeacherService teacherService; /** * 查詢所有學(xué)生信息 * * @return Student */ @GetMapping("/test/1") public List<Student> findAllStudent() { return studentService.findAllStudent(); } /** * 查詢所有教師信息 * * @return Teacher */ @GetMapping("/test/2") public List<Teacher> findAllTeacher() { return teacherService.findAllTeacher(); } }
需要注意的一點(diǎn)是mapper和mapper.xml路徑需一致否自會導(dǎo)致編譯后找不到xml文件
下面可以來看一下測試結(jié)果:
查詢學(xué)生:
查詢老師:
此時不管是學(xué)生還是老師的信息是都可以查詢出來的,這就全靠TeacherServiceImpl中使用的DS(“slave”)指定了數(shù)據(jù)源,假如說我們把注解去掉再來一次試試,可以看到請求報錯提示students庫中沒有teacher這個表,所以說在我們沒有指定數(shù)據(jù)源的時候,它是會自動去匹配默認(rèn)的數(shù)據(jù)源來查詢!
- SpringBoot動態(tài)數(shù)據(jù)源連接測試的操作詳解
- SpringBoot實現(xiàn)動態(tài)數(shù)據(jù)源切換的方法總結(jié)
- springboot配置多數(shù)據(jù)源(靜態(tài)和動態(tài)數(shù)據(jù)源)
- SpringBoot中動態(tài)數(shù)據(jù)源是實現(xiàn)與用途
- Springboot實現(xiàn)根據(jù)用戶ID切換動態(tài)數(shù)據(jù)源
- 詳解SpringBoot+Mybatis實現(xiàn)動態(tài)數(shù)據(jù)源切換
- SpringBoot Mybatis動態(tài)數(shù)據(jù)源切換方案實現(xiàn)過程
- 通過springboot+mybatis+druid配置動態(tài)數(shù)據(jù)源
- SpringBoot整合MyBatisPlus配置動態(tài)數(shù)據(jù)源的方法
- springboot 動態(tài)數(shù)據(jù)源的實現(xiàn)方法(Mybatis+Druid)
- SpringBoot實現(xiàn)動態(tài)數(shù)據(jù)源切換的項目實踐
相關(guān)文章
java經(jīng)典問題:連個字符串互為回環(huán)變位
連個字符串互為回環(huán)變位經(jīng)常出現(xiàn)在java程序員面試中,這個是考驗程序員的解題思路和方法的最經(jīng)典的一題,小編為大家詳細(xì)分析一下,一起來學(xué)習(xí)吧。2017-11-11如何將IDEA打成jar包并在windows后臺運(yùn)行
在本篇文章里小編給大家分享的是關(guān)于如何將IDEA打成jar包并在windows后臺運(yùn)行知識點(diǎn),需要的朋友們可以學(xué)習(xí)參考下。2019-08-08Spring中11個最常用的擴(kuò)展點(diǎn)總結(jié),你知道幾個
我們知道IOC(控制反轉(zhuǎn))和AOP(面向切面編程)是spring的基石,除此之外spring的擴(kuò)展能力非常強(qiáng),下面這篇文章主要給大家介紹了關(guān)于Spring中11個最常用的擴(kuò)展點(diǎn)的相關(guān)資料,需要的朋友可以參考下2022-12-12Java基于socket實現(xiàn)的客戶端和服務(wù)端通信功能完整實例
這篇文章主要介紹了Java基于socket實現(xiàn)的客戶端和服務(wù)端通信功能,結(jié)合完整實例形式分析了Java使用socket建立客戶端與服務(wù)器端連接與通信功能,需要的朋友可以參考下2018-05-05