基於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);
}
}