重学SpringBoot3-AbstractRoutingDataSource介绍

更多SpringBoot3内容请关注我的专栏:《SpringBoot3》
期待您的点赞👍收藏⭐评论✍

在现代的应用开发中,尤其是在 SaaS 多租户架构、读写分离、或者多数据源的场景下,通常需要动态地切换数据源。Spring Boot 3 提供的 AbstractRoutingDataSource 类是实现这一功能的核心工具之一。

本文将详细介绍 AbstractRoutingDataSource 的作用、使用场景及其实现方法。

1. 什么是 AbstractRoutingDataSource

位置:org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource

AbstractRoutingDataSource

AbstractRoutingDataSource 是 Spring 提供的一个抽象类,它是 DataSource 的子类,用于实现数据源的动态路由。动态路由意味着可以根据某些条件或上下文来决定具体使用哪个数据源。这个类的核心功能是根据用户定义的规则,动态决定在特定的操作中使用哪个数据源,而不需要每次手动切换。

这个机制特别适用于以下几种场景:

  • 多租户架构:不同的租户需要访问不同的数据库或数据源。
  • 读写分离:写操作使用主库,读操作使用从库。
  • 多数据源:根据业务逻辑动态选择使用不同的数据库。

2. AbstractRoutingDataSource 的作用

在实际应用中,AbstractRoutingDataSource 主要用于以下几个方面:

  • 根据上下文动态选择数据源:例如,在多租户系统中,可以根据当前租户的 ID 动态选择相应的数据库。
  • 简化多数据源的管理:避免硬编码多个数据源,提供更灵活的动态数据源切换能力。
  • 读写分离:通常在高并发的应用场景中,将写操作路由到主数据库,读操作路由到从数据库,从而提高系统性能和可扩展性。

3. 如何使用 AbstractRoutingDataSource

实现 AbstractRoutingDataSource 的步骤相对简单,关键在于实现其 determineCurrentLookupKey() 方法,该方法用于根据上下文条件返回数据源的 key。

3.1. 添加依赖

首先,在 pom.xml 中引入 Spring Boot 3mybatis 的相关依赖,具体参考重学SpringBoot3-整合SSM

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>3.0.3</version>
		</dependency>
		<dependency>
			<groupId>com.mysql</groupId>
			<artifactId>mysql-connector-j</artifactId>
			<scope>runtime</scope>
		</dependency>

3.2. 配置数据源

3.2. 配置文件

spring:
  datasource:
    master: # 自定义名称
      driver-class-name: com.mysql.cj.jdbc.Driver
      jdbcUrl: jdbc:mysql://localhost:3306/master_db?useSSL=false&serverTimezone=UTC
      username: master_user
      password: master_password
    slave:  # 自定义名称
      driver-class-name
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

CoderJia_

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

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

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

打赏作者

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

抵扣说明:

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

余额充值