如何在Java SpringBoot項(xiàng)目中配置動(dòng)態(tài)數(shù)據(jù)源你知道嗎
在我們工作中涉及到一些場(chǎng)景需要我們配置多數(shù)據(jù)源的操作,之前來(lái)說(shuō)我們配置數(shù)據(jù)源需要寫(xiě)繁瑣的配置類(lèi)來(lái)配置我們的數(shù)據(jù)源,哪個(gè)是默認(rèn)數(shù)據(jù)源等等,而現(xiàn)在我們可以使用“苞米豆”為我們提供的提供的第三方工具,只需要簡(jiǎn)單配置就可以實(shí)現(xiàn)多數(shù)據(jù)源之間的靈活切換了!
首先需要引入第三方依賴(lài)
<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ù)源時(shí)拋異常,false使用默認(rèn)數(shù)據(jù)源 datasource: master: # 名稱(chēng)可以自己定義 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: # 名稱(chēng)可以自己定義 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)建如下兩個(gè)數(shù)據(jù)庫(kù)
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(); } }
下面是兩個(gè)測(cè)試方法
@RestController public class TestController { @Autowired private StudentService studentService; @Autowired private TeacherService teacherService; /** * 查詢(xún)所有學(xué)生信息 * * @return Student */ @GetMapping("/test/1") public List<Student> findAllStudent() { return studentService.findAllStudent(); } /** * 查詢(xún)所有教師信息 * * @return Teacher */ @GetMapping("/test/2") public List<Teacher> findAllTeacher() { return teacherService.findAllTeacher(); } }
需要注意的一點(diǎn)是mapper和mapper.xml路徑需一致否自會(huì)導(dǎo)致編譯后找不到xml文件
下面可以來(lái)看一下測(cè)試結(jié)果:
查詢(xún)學(xué)生:
查詢(xún)老師:
此時(shí)不管是學(xué)生還是老師的信息是都可以查詢(xún)出來(lái)的,這就全靠TeacherServiceImpl中使用的DS(“slave”)指定了數(shù)據(jù)源,假如說(shuō)我們把注解去掉再來(lái)一次試試,可以看到請(qǐng)求報(bào)錯(cuò)提示students庫(kù)中沒(méi)有teacher這個(gè)表,所以說(shuō)在我們沒(méi)有指定數(shù)據(jù)源的時(shí)候,它是會(huì)自動(dòng)去匹配默認(rèn)的數(shù)據(jù)源來(lái)查詢(xún)!
- SpringBoot動(dòng)態(tài)數(shù)據(jù)源連接測(cè)試的操作詳解
- SpringBoot實(shí)現(xiàn)動(dòng)態(tài)數(shù)據(jù)源切換的方法總結(jié)
- springboot配置多數(shù)據(jù)源(靜態(tài)和動(dòng)態(tài)數(shù)據(jù)源)
- SpringBoot中動(dòng)態(tài)數(shù)據(jù)源是實(shí)現(xiàn)與用途
- Springboot實(shí)現(xiàn)根據(jù)用戶(hù)ID切換動(dòng)態(tài)數(shù)據(jù)源
- 詳解SpringBoot+Mybatis實(shí)現(xiàn)動(dòng)態(tài)數(shù)據(jù)源切換
- SpringBoot Mybatis動(dòng)態(tài)數(shù)據(jù)源切換方案實(shí)現(xiàn)過(guò)程
- 通過(guò)springboot+mybatis+druid配置動(dòng)態(tài)數(shù)據(jù)源
- SpringBoot整合MyBatisPlus配置動(dòng)態(tài)數(shù)據(jù)源的方法
- springboot 動(dòng)態(tài)數(shù)據(jù)源的實(shí)現(xiàn)方法(Mybatis+Druid)
- SpringBoot實(shí)現(xiàn)動(dòng)態(tài)數(shù)據(jù)源切換的項(xiàng)目實(shí)踐
相關(guān)文章
java經(jīng)典問(wèn)題:連個(gè)字符串互為回環(huán)變位
連個(gè)字符串互為回環(huán)變位經(jīng)常出現(xiàn)在java程序員面試中,這個(gè)是考驗(yàn)程序員的解題思路和方法的最經(jīng)典的一題,小編為大家詳細(xì)分析一下,一起來(lái)學(xué)習(xí)吧。2017-11-11零基礎(chǔ)寫(xiě)Java知乎爬蟲(chóng)之抓取知乎答案
上篇文章我們已經(jīng)能把知乎的問(wèn)題抓出來(lái)了,但是答案還木有抓出來(lái)。這一回合,我們就連著把答案也一起從網(wǎng)站中摳出來(lái)=。=2014-11-11如何將IDEA打成jar包并在windows后臺(tái)運(yùn)行
在本篇文章里小編給大家分享的是關(guān)于如何將IDEA打成jar包并在windows后臺(tái)運(yùn)行知識(shí)點(diǎn),需要的朋友們可以學(xué)習(xí)參考下。2019-08-08Spring中11個(gè)最常用的擴(kuò)展點(diǎn)總結(jié),你知道幾個(gè)
我們知道IOC(控制反轉(zhuǎn))和AOP(面向切面編程)是spring的基石,除此之外spring的擴(kuò)展能力非常強(qiáng),下面這篇文章主要給大家介紹了關(guān)于Spring中11個(gè)最常用的擴(kuò)展點(diǎn)的相關(guān)資料,需要的朋友可以參考下2022-12-12Java基于socket實(shí)現(xiàn)的客戶(hù)端和服務(wù)端通信功能完整實(shí)例
這篇文章主要介紹了Java基于socket實(shí)現(xiàn)的客戶(hù)端和服務(wù)端通信功能,結(jié)合完整實(shí)例形式分析了Java使用socket建立客戶(hù)端與服務(wù)器端連接與通信功能,需要的朋友可以參考下2018-05-05