- 1. 准备依赖
- 2. 启动类注解加参数
- 3. 配置文件配置多数据源
- 4. 在serviceImpl使用@DS
- 5. 注意事项
此处只展示了多数据源需要的依赖,基本的mybatisplus依赖不再展示
<dependency>
<groupId>com.baomidougroupId>
<artifactId>dynamic-datasource-spring-boot-starterartifactId>
<version>2.5.6version>
dependency>
2. 启动类注解加参数
此处易忽略,勿忘
@SpringBootApplication
加参数exclude = {DruidDataSourceAutoConfigure.class}
// 第一行是需要加的,其他无必要不需要加(为方便理解才复制整个启动类)
@SpringBootApplication(exclude = {DruidDataSourceAutoConfigure.class})
@MapperScan({"com.xingye.outerapi.**.mapper"})
@EnableSwagger2Doc
@EnableTransactionManagement
@EnableConvertScan(basePackages = "com.xingye.outerapi")
@EnableFeignClients
public class OuterapiApplication {
public static void main(String[] args) {
SpringApplication.run(OuterapiApplication.class,args);
}
}
3. 配置文件配置多数据源
提醒一下,如果用yml的话一定注意空格缩进
spring:
# 数据库配置
datasource:
# 此处的一般写默认库的信息
url: jdbc:mysql://xxx.xxx.xxx.xxx:3306/test1?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
driver-class-name: com.mysql.cj.jdbc.Driver
username: xxxxxxxxx
password: xxxxxxxxxxx
# 从这里开始是对多数据源的配置
dynamic:
primary: test1 # 设置默认的数据源或者数据源组,默认值即为test1
strict: false # 严格匹配数据源,默认false(true未匹配到指定数据源时抛异常,false使用默认数据源)
datasource:
# 配置第1个数据库为test1
test1:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jjdbc:mysql://xxx.xxx.xxx.xxx:3306/test1?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
driver-class-name: com.mysql.cj.jdbc.Driver
username: xxxxxxxxx
password: xxxxxxxxxxx
# 配置第2个数据库为test2
test2:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://xxx.xxx.xxx.xxx:3306/test2?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
driver-class-name: com.mysql.cj.jdbc.Driver
username: xxxxxxxxx
password: xxxxxxxxxxx
4. 在serviceImpl使用@DS
注解 | 结果 |
---|---|
没有@DS | 默认数据源 |
@DS(“dsName”) | dsName可以为组名也可以为具体某个库的名称 |
- 在类上加,所有方法都会使用注解指定的数据源
@DS("test2")
@Service
public class TestServiceImpl implements TestService {
@Autowired
private TestMapper testMapper;
@Override
public List<String> test1(String num) {
........
}
@Override
public List<String> test2(String num) {
........
}
}
- 在方法上加,各自方法使用各自注解指定的数据源
@Service
public class TestServiceImpl implements TestService {
@Autowired
private TestMapper testMapper;
@DS("test1")
@Override
public List<String> test1(String num) {
........
}
@DS("test2")
@Override
public List<String> test2(String num) {
........
}
}
5. 注意事项
不能使用事务
,否则数据源不会切换,使用的还是第一次加载的数据源- 第一次加载数据源之后,第二次、第三次… *** 作其它数据源,如果数据源不存在,使用的还是第一次加载的数据源
- 数据源名称
不要包含下划线
,否则不能切换
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)