更多SpringBoot3内容请关注我的专栏:《SpringBoot3》
期待您的点赞👍收藏⭐评论✍
重学SpringBoot3-AbstractRoutingDataSource介绍
在现代的应用开发中,尤其是在 SaaS 多租户架构、读写分离、或者多数据源的场景下,通常需要动态地切换数据源。Spring Boot 3 提供的 AbstractRoutingDataSource
类是实现这一功能的核心工具之一。
本文将详细介绍 AbstractRoutingDataSource
的作用、使用场景及其实现方法。
1. 什么是 AbstractRoutingDataSource
位置:org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource
AbstractRoutingDataSource
是 Spring 提供的一个抽象类,它是 DataSource
的子类,用于实现数据源的动态路由。动态路由意味着可以根据某些条件或上下文来决定具体使用哪个数据源。这个类的核心功能是根据用户定义的规则,动态决定在特定的操作中使用哪个数据源,而不需要每次手动切换。
这个机制特别适用于以下几种场景:
- 多租户架构:不同的租户需要访问不同的数据库或数据源。
- 读写分离:写操作使用主库,读操作使用从库。
- 多数据源:根据业务逻辑动态选择使用不同的数据库。
2. AbstractRoutingDataSource 的作用
在实际应用中,AbstractRoutingDataSource
主要用于以下几个方面:
- 根据上下文动态选择数据源:例如,在多租户系统中,可以根据当前租户的 ID 动态选择相应的数据库。
- 简化多数据源的管理:避免硬编码多个数据源,提供更灵活的动态数据源切换能力。
- 读写分离:通常在高并发的应用场景中,将写操作路由到主数据库,读操作路由到从数据库,从而提高系统性能和可扩展性。
3. 如何使用 AbstractRoutingDataSource
实现 AbstractRoutingDataSource
的步骤相对简单,关键在于实现其 determineCurrentLookupKey()
方法,该方法用于根据上下文条件返回数据源的 key。
3.1. 添加依赖
首先,在 pom.xml
中引入 Spring Boot 3 和 mybatis 的相关依赖,具体参考重学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