一、说明
项目是SpringBoot项目,主数据源是MySQL数据库,另个数据源是SQL Server数据库。
配置文件用的是yml,转properties也比较简单。
二、POM依赖
<!-- mysql jdbc -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.46</version>
</dependency>
<!-- sqlserver jdbc -->
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<version>7.4.1.jre8</version>
</dependency>
<!-- Druid 数据连接池依赖 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
<!-- dynamic 主从配置依赖-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>2.4.2</version>
</dependency>
<!-- mybatis-plus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.0.7.1</version>
</dependency>
三、yml配置
# spring配置
spring:
# 自动配置 引入Druid
autoconfigure:
exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure
# 数据源配置情况
datasource:
dynamic:
# 是否开启对mybatis-plus的支持,默认是false,2.4.2版本取消了这个字段,可删除
mp-enabled: true
# 默认数据源(主数据源)
primary: master
# 配置数据源
datasource:
# 主数据源
master:
url: jdbc:mysql://localhost:3306/test1?useSSL=false&allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8
username: root
password: 123456
driverClassName: com.mysql.jdbc.Driver
druid:
initialSize: 1
minIdle: 1
maxWait: 60000
maxActive: 1
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
validationQuery: select 1
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: true
maxOpenPreparedStatements: 50
sharePreparedStatements: true
filters: stat,wall
# 第二个数据源
second:
url: jdbc:sqlserver://localhost:14330;DatabaseName=test2
username: sa
password: 123456
driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver
druid:
initialSize: 1
minIdle: 1
maxWait: 60000
maxActive: 1
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
validationQuery: select 1
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: true
maxOpenPreparedStatements: 50
sharePreparedStatements: true
filters: stat,wall
四、数据源切换
yml配置文件中,primary: master 说明了默认使用的数据源,即在不切换的情况下使用的数据源。
配置中可以看出主数据源是MySQL,第二个数据源为SQL Server。
如果需要切换数据源,则在对应的方法或者server层中加入 @DS("second") 注解即可。
/**
* server层开头加@DS注解,表示整个类下面的方法均要切换到对应的数据源
* 不能在controller层中使用@DS注解,会出现报错
**/
@Service
@DS("second")
public class TestService {
@Resource
private TestMapper testMapper;
public List selectOneById(Integer id) {
return testMapper.selectOneById(id);
}
/**
* 单独在对应的方法上面加@DS注解,表示单独该方法需要切换到对应的数据源
**/
@DS("second")
public void insertOne(Map map) {
testMapper.insertOne(map);
}
public int updateById(Map map) {
return testMapper.updateById(map);
}
public void deleteById(Integer id) {
testMapper.deleteById(id);
}
}
五、结语
至此,该SpringBoot项目即可连接多数据源了,需要注意MySQL和SQL Server的 SQL语句和函数有较大的不同,需要做区分。
关于分页的问题,MySQL的分页使用LIMIT关键字,SQL Server使用TOP关键字。不过,我们没有必要担心,因为MyBatis-Plus 在做分页处理是针对不同的数据源有不同分页处理,它可以很好的兼容。
关于依赖的版本,建议选择和文章上面相同的一组,选择更新或者更老的版本可能会导致一些字段不存在或者yml格式的调整。