1 多数据源配置
- 引用的maven依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>2.5.4</version>
</dependency>
- 在
application.yml
中的添加的内容
spring:
autoconfigure:
# 为了某些版本的springboot @SpringBootApplication(exclude= {DataSourceAutoConfiguration.class}) 无法生效
exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure
datasource:
dynamic:
#设置默认的数据源或者数据源组,默认值即为master,如果读者只是单数据源只需要注释掉slave相关配置即可,这里为了方便演示master与slave保持相同
primary: master
datasource:
master:
username: root
password: root
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/test_database1?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&serverTimezone=Asia/Shanghai
test1:
username: root
password: root
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/test_database2?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false&serverTimezone=GMT%2b8
test2:
username: root
password: root
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/test_database3?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true
# 以下是连接池配置 也可以用Druid的数据源自己改一下就行了
initial-size: 10
max-active: 100
min-idle: 10
max-wait: 60000
pool-prepared-statements: true
max-pool-prepared-statement-per-connection-size: 20
time-between-eviction-runs-millis: 60000
min-evictable-idle-time-millis: 300000
#validation-query: SELECT 1
test-while-idle: true
test-on-borrow: false
test-on-return: false
stat-view-servlet:
enabled: true
url-pattern: /druid/*
login-username: druid
login-password: 123456
filter:
stat:
log-slow-sql: true
slow-sql-millis: 1000
merge-sql: false
wall:
config:
multi-statement-allow: true
2. 启动类修改
如果报错数据源配置啥的可以改,没报错的话直接不改也是可以的,这一部分忘了是啥了下不写,好像是这个
@SpringBootApplication(exclude= {DataSourceAutoConfiguration.class})
3. 使用
在相对应的Mapper.java中直接使用
@DS("master")
注解即可,有一个问题在于如果你在一个方法里边掉了两个数据源的mapper这个时候Spring的事务会失效,如果不加@DS
的话默认使用${spring.}
对应的数据源
这个注解可以加在类上,表示整个类都是这个数据源的,也可以加在单个方法上,只作用一个方法指定数据源
package net.lesscoding.mapper;
import com.baomidou.dynamic.datasource.annotation.DS;
import java.util.List;
public interface OtherDatabaseMapper {
@DS("test1")
List<FkUserPo> queryUDO();
}