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
Oracleselect 1 from dual
MySQLselect 1
Microsoft SQL Serverselect 1
DB2select 1 from sysibm.sysdummy1
SQLiteselect 1
HSQLDBselect 1 from INFORMATION_SCHEMA.SYSTEM_USERS
postgresqlselect version()
ingresselect 1
Apache Derbyselect 1
H2select 1
Informixselect 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版权协议,转载请附上原文出处链接和本声明。