亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

如何在Java SpringBoot項(xiàng)目中配置動(dòng)態(tài)數(shù)據(jù)源你知道嗎

 更新時(shí)間:2021年09月06日 10:56:24   作者:t梧桐樹(shù)t  
這篇文章主要介紹了SpringBoot如何在運(yùn)行時(shí)動(dòng)態(tài)添加數(shù)據(jù)源,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

在我們工作中涉及到一些場(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)!

相關(guān)文章

  • Java?@Transactional指定回滾條件

    Java?@Transactional指定回滾條件

    這篇文章主要介紹了Java?@Transactional指定回滾條件,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下
    2022-08-08
  • Java 中的抽象介紹

    Java 中的抽象介紹

    這篇文章主要介紹了Java 中的抽象,數(shù)據(jù)抽象是一種僅向用戶(hù)顯示基本細(xì)節(jié)的屬性。不向用戶(hù)顯示瑣碎或非必需的單元,下面文章Java抽象詳細(xì)內(nèi)容,需要的朋友可以參考一下
    2021-12-12
  • java經(jīng)典問(wèn)題:連個(gè)字符串互為回環(huá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
  • 教你怎么用Java回溯算法解數(shù)獨(dú)

    教你怎么用Java回溯算法解數(shù)獨(dú)

    一直不太會(huì)數(shù)獨(dú)問(wèn)題,這次下決定搞明白,所以整理了本篇文章,文中有非常詳細(xì)的代碼示例,對(duì)不會(huì)算法的小伙伴們很有幫助,需要的朋友可以參考下
    2021-06-06
  • 零基礎(chǔ)寫(xiě)Java知乎爬蟲(chóng)之抓取知乎答案

    零基礎(chǔ)寫(xiě)Java知乎爬蟲(chóng)之抓取知乎答案

    上篇文章我們已經(jīng)能把知乎的問(wèn)題抓出來(lái)了,但是答案還木有抓出來(lái)。這一回合,我們就連著把答案也一起從網(wǎng)站中摳出來(lái)=。=
    2014-11-11
  • java9學(xué)習(xí)筆記之模塊化詳解

    java9學(xué)習(xí)筆記之模塊化詳解

    Java 9中最重要的功能,毫無(wú)疑問(wèn)就是模塊化(Module),下面這篇文章主要給大家介紹了關(guān)于java9學(xué)習(xí)筆記之模塊化的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。
    2018-04-04
  • 如何將IDEA打成jar包并在windows后臺(tái)運(yùn)行

    如何將IDEA打成jar包并在windows后臺(tái)運(yùn)行

    在本篇文章里小編給大家分享的是關(guān)于如何將IDEA打成jar包并在windows后臺(tái)運(yùn)行知識(shí)點(diǎn),需要的朋友們可以學(xué)習(xí)參考下。
    2019-08-08
  • Spring中11個(gè)最常用的擴(kuò)展點(diǎn)總結(jié),你知道幾個(gè)

    Spring中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-12
  • 基于java涉及父子類(lèi)的異常詳解

    基于java涉及父子類(lèi)的異常詳解

    下面小編就為大家?guī)?lái)一篇基于java涉及父子類(lèi)的異常詳解。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-09-09
  • Java基于socket實(shí)現(xiàn)的客戶(hù)端和服務(wù)端通信功能完整實(shí)例

    Java基于socket實(shí)現(xiàn)的客戶(hù)端和服務(wù)端通信功能完整實(shí)例

    這篇文章主要介紹了Java基于socket實(shí)現(xiàn)的客戶(hù)端和服務(wù)端通信功能,結(jié)合完整實(shí)例形式分析了Java使用socket建立客戶(hù)端與服務(wù)器端連接與通信功能,需要的朋友可以參考下
    2018-05-05

最新評(píng)論