Java 使用SpringCloud AWS RDS Aurora的SpringBoot应用程序-如何分发读取查询
我有一个使用AWS RDS DB的Spring Boot应用程序 我正在尝试让RDS Aurora/Postgres DB处理读取副本。我已经让应用程序运行,但是我看不到任何流向读卡器节点的流量 设置为Spring boot(2.2.7)、Spring cloud aws 2.2.4-RELEASE、Spring data(JpaRepository) RDS Aurora群集具有2个节点、1个读卡器和1个写卡器,如下所示: 用Java 使用SpringCloud AWS RDS Aurora的SpringBoot应用程序-如何分发读取查询,java,spring-boot,amazon-aurora,spring-cloud-aws,Java,Spring Boot,Amazon Aurora,Spring Cloud Aws,我有一个使用AWS RDS DB的Spring Boot应用程序 我正在尝试让RDS Aurora/Postgres DB处理读取副本。我已经让应用程序运行,但是我看不到任何流向读卡器节点的流量 设置为Spring boot(2.2.7)、Spring cloud aws 2.2.4-RELEASE、Spring data(JpaRepository) RDS Aurora群集具有2个节点、1个读卡器和1个写卡器,如下所示: 用@Transactional(readOnly=true) @Re
@Transactional(readOnly=true)
@RequestMapping(
value=“/counters”,
生成={“应用程序/json”},
method=RequestMethod.GET
)
@应答器
@事务(只读=真)
公众响应getCounters(){
返回ResponseEntity.of(可选)(this.counterDAO.findAll());
}
最后是SpringCloudAWS配置
cloud:
aws:
region:
static: ap-southeast-2
credentials:
accessKey: ${ACCESS_KEY}
secretKey: ${SECRET_KEY}
rds:
rds-db-cluster-instance-1:
password: ${POSTGRES_PASSWORD}
username: postgres
readReplicaSupport: "true"
databaseName: postgres
stack:
auto: false
此时,我可以从DB读写,但是我看不到任何证据表明它正在使用reader节点
只有当我使用writer实例名作为cloud.aws.rds.
时,应用程序才会启动。使用集群名(使用writer id可能是配置它的正确方法,文档并不十分清楚)时,如果我使用只读实例id,则更新DB的方法会失败
AWS控制台上的监控仅显示Writer节点上的连接(我可以通过两个线程调用get和POST方法将连接增加到10-15个),但是Reader节点始终为0
其次,我用类上的调试器设置了断点,这些断点永远不会被命中,所以我很确定它没有使用只读功能
我相当确定这是由于我正在使用的实例id造成的,可能与基础RDS配置有关,但我一辈子都无法解决这一问题。事实证明,问题在于使用RDS Aurora群集,而不是使用具有读取副本的RDS实例,这个问题是RDS群集功能请求。我将保留这个问题,肯定会有一种方法可以配置多个数据源来使用Aurora