springboot項目中實現【多數據源的動態切換】

基於springboot開箱即用的多數據源動態調整插件,在service層使用註解@TargetDataSource("dsName")可以直接切換數據源,如果不使用,調用默認配置的數據源

具體如下:

1、新建springboot項目:

2、application.properties文件

#這裏你可以直接使用dev的配置,但在實際項目中都會區分開來。這裏使用的dev環境的配置文件
spring.profiles.active=dev

3、application-dev.properties文件:

#datasource
spring.datasource.names=dsName1,dsName2,dsName3

#dsName1
custom.datasource.dsName1.driverClassName =com.mysql.jdbc.Driver
custom.datasource.dsName1.url=jdbc:mysql://localhost:3306/test1?characterEncoding=utf-8&useSSL=true
custom.datasource.dsName1.username=root
custom.datasource.dsName1.password=123456
spring.datasource.dsName1.validationQuery=SELECT 1 FROM DUAL
spring.datasource.dsName1.testWhileIdle=true

#dsName2
custom.datasource.dsName2.driverClassName =com.mysql.jdbc.Driver
custom.datasource.dsName2.url=jdbc:mysql://localhost:3306/test2?characterEncoding=utf-8&useSSL=true
custom.datasource.dsName2.username=root
custom.datasource.dsName2.password=123456
spring.datasource.dsName2.validationQuery=SELECT 1 FROM DUAL
spring.datasource.dsName2.testWhileIdle=true

#dsName3
custom.datasource.dsName3.driverClassName =com.mysql.jdbc.Driver
custom.datasource.dsName3.url=jdbc:mysql://localhost:3306/test3?characterEncoding=utf-8&useSSL=true
custom.datasource.dsName3.username=root
custom.datasource.dsName3.password=123456
spring.datasource.dsName3.validationQuery=SELECT 1 FROM DUAL
spring.datasource.dsName3.testWhileIdle=true

說明1:其中url是你的數據源的地址,比如下面這種
在這裏插入圖片描述

說明2:spring.datasource.dsName3.validationQuery=SELECT 1 FROM DUAL這句是測試數據庫連接的

validationQuery是用來驗證數據庫連接的查詢語句,這個查詢語句必須是至少返回一條結果的SELECT語句。以下是常用的一些檢查語句

數據庫 validationQuery
Oracle select 1 from dual
MySQL select 1
Microsoft SQL Server select 1
DB2 select 1 from sysibm.sysdummy1
SQLite select 1
HSQLDB select 1 from INFORMATION_SCHEMA.SYSTEM_USERS
postgresql select version()
ingres select 1
Apache Derby select 1
H2 select 1
Informix select count(*) from systables

4、service中使用註解TargetDataSource

@Service
public class TestService {

    private static Logger log = LoggerFactory.getLogger(TestService.class);

    @Resource
    private TestDao testDao;

    @TargetDataSource("dsName1")
    public List<String> testMethod1() {
        return testDao.testMethod1();
    }

    @TargetDataSource("dsName2")
    public List<String> testMethod2() {
        return testDao.testMethod2();
    }

    @TargetDataSource("dsName3")
    public List<Map<String,Object>> testMethod3(List<String> list) {
        return testDao.testMethod3(list);
    }
}

5、在對應的dao層,做查詢時。即可完成數據源的切換。我這裏使用的是mybatis,所以正常寫dao,在寫dao對應的mapper即可

發佈了65 篇原創文章 · 獲贊 271 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章