You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot只读查询访问只读副本:配置与验证方法问询

Spring Boot 配置RDS只读副本路由方案

一、简便配置方式(基于Spring Cloud AWS)

1. 添加依赖

在pom.xml中引入Spring Cloud AWS的RDS starter:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-aws-rds</artifactId>
    <version>2.1.3.RELEASE</version>
</dependency>

2. 配置文件

在application.yml中配置主库与只读副本信息:

spring:
  cloud:
    aws:
      rds:
        database-name: your-db-name
        username: your-db-user
        password: your-db-pass
        read-replicas:
          - url: jdbc:postgresql://replica-1-endpoint:5432/your-db-name
          - url: jdbc:postgresql://replica-2-endpoint:5432/your-db-name
        # 主库URL
        url: jdbc:postgresql://primary-endpoint:5432/your-db-name

3. 标记只读查询

  • 方法级别:用@ReadOnly注解标记需要路由到副本的SELECT方法:
@ReadOnly
public List<User> getUsers() {
    return jdbcTemplate.query("SELECT * FROM users", new UserRowMapper());
}
  • 事务级别:使用@Transactional(readOnly = true),框架会自动将只读事务路由至副本:
@Transactional(readOnly = true)
public User getUserById(Long id) {
    return jdbcTemplate.queryForObject("SELECT * FROM users WHERE id = ?", new UserRowMapper(), id);
}

二、验证查询是否命中副本

1. 应用日志验证

开启数据源连接日志,比如HikariCP的日志(在logback.xml中配置):

<logger name="com.zaxxer.hikari" level="DEBUG"/>

查看日志中打印的连接URL,确认只读方法使用的是副本节点的地址。

2. 数据库端验证

对于Postgres RDS,可登录副本节点执行以下SQL查看当前活跃查询:

SELECT query, client_addr FROM pg_stat_activity WHERE query LIKE 'SELECT%';

检查结果中的client_addr是否为应用服务器的IP,且查询来自副本实例。

3. 自定义拦截器验证

实现DataSource的代理类,在获取连接时记录当前使用的数据源地址,输出到日志或监控系统。

三、AWS日志验证

1. RDS查询日志

开启RDS的通用查询日志或慢查询日志:

  • 登录AWS控制台,进入RDS实例的“配置”页面,开启对应日志选项。
  • 日志会自动推送至CloudWatch Logs,在CloudWatch中搜索日志内容,可通过host字段区分主库与副本实例,同时查看SQL语句是否为只读查询。

2. CloudWatch指标辅助

查看RDS实例的DatabaseConnections指标,对比主库与副本的连接数变化,确认只读查询带来的连接数增长集中在副本节点。

四、Postgres兼容性说明

该方案完全适用于RDS Postgres,Spring Cloud AWS的只读路由逻辑基于JDBC层面的数据源切换,与数据库类型无关,只要正确配置副本的JDBC URL即可实现路由,和MySQL的实现逻辑一致。

参考Spring Cloud AWS 2.1.3文档内容:
Spring Cloud AWS支持配置Amazon RDS只读副本,将只读查询路由至副本节点以减轻主库负载。配置时需指定主库JDBC URL及一个或多个副本的JDBC URL。通过@ReadOnly注解或@Transactional(readOnly = true)事务注解标记只读方法,框架会自动将对应操作路由至只读副本。同时可通过spring.cloud.aws.rds.read-replicas属性定义副本列表,框架会自动处理负载均衡与故障转移。

内容的提问来源于stack exchange,提问作者Isidora

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 02:33:37