【JAVA】SpringBoot如何连接多个数据库

提示:看完如果觉得有帮助,可以帮忙点个赞或者关注支持一下喔


前言

在开发工作中,我们经常会遇到需要从不同的数据库中获取数据的情况,接下来就是介绍一种在SpringBoot中连接多个数据库并获取数据的方法。


一、引入MybatisPlus多数据源依赖

在项目的pom文件中添加如下依赖

<dependency>
	<groupId>com.baomidou</groupId>
	<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
	<version>3.3.1</version>
</dependency>

二、修改yml配置

在spring字段下添加datasource字段并写入如下内容

spring:
	# 其它配置内容
	datasource:
		dynamic:
			primary: db1 # 主数据源
			datasource: # 数据源说明
				db1:
					# 数据库驱动,这里要换成自己所用的数据库的驱动
					driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
					# 数据库地址和数据库名,这里也是要换成自己的
					url: jdbc:sqlserver://127.0.0.1:1433;DatabaseName=your-database-name
					username: sa
					password: password
				db2:
					# 数据源2的数据库驱动,可以和db1不同
					driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
					# 数据库2的地址
					url: jdbc:sqlserver://192.168.1.1:1433;DatabaseName=your-database-name
					username: sa
					password: password2

三、在业务层上添加@DS注解

@Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW)
@Service
@DS("db1") // yml中配置的数据源名
public class BussinessServiceImpl implements IBussinessService {
	// 这里的业务代码就可以使用db1的数据,但是调用不到db2的数据
}

四、相关问题

1、如何在一个业务类中调用到多个数据源的数据?

在一个业务类中无法同时调用多个数据源,建议将业务类拆分,通过组合多个业务类来实现对多数据源的读写。

2、@DS和@Transactional注解冲突导致出现找不到数据源的问题

如果直接将数据源2的业务类注入到其它数据源的业务类中,如果此时被注入的业务类开启了事务,则调用数据源2业务类方法后会出现访问不到数据源的问题,这是由于在其它业务类中当前线程绑定的仍是其它业务类自己的事务,此时当然访问不到数据源2。
有两种解决办法
1、修改业务类上@Transactional注解,添加propagation = Propagation.REQUIRES_NEW,强制将原有事务挂起并创建新事务

@Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW)

2、将@Transactional改为@DSTransactional


  • 6
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yahahaCoding

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值