基于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即可
版权声明:本文为Song_JiangTao原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。
