Spring Boot 和 AWS RDS 只读副本

dha*_*ram 8 amazon-web-services amazon-rds spring-data-jpa spring-boot read-replication

在这里,我试图在 AWS RDS 中实现以下目标。我有一个正在运行的 MySQL 数据库实例。我正在考虑创建只读副本,以便拥有一些额外的负载共享功能。

我有一个在 EC2 上运行的 Spring Boot 应用程序。目前我连接到数据库的方式是在 application.yml 中添加以下属性:

datasource:
    type: com.zaxxer.hikari.HikariDataSource
    url: jdbc:mysql://DB_HOSTNAME:3306/DB_DATABASE?useUnicode=true&characterEncoding=utf8&useSSL=false&useLegacyDatetimeCode=false&serverTimezone=UTC
    username: DB_USERNAME
    password: DB_PASSWORD
Run Code Online (Sandbox Code Playgroud)

我的问题是:

  • 如果我创建只读副本,是否需要编写一些特殊代码来连接到它?
  • 我是否需要多个连接池,每个数据库实例一个连接池?
  • 从代码角度来看,这是如何可扩展的,如果我有 5 个只读副本,我如何在代码中管理它?
  • 如何将数据库调用定向到不同的副本?这个决定的依据是什么?

如果有任何链接/视频/文档,您可以指出我。Spring Boot 不是必需的,我需要了解什么是从 Java 应用程序利用只读副本的好方法。

谢谢

Nir*_*ane 3

如果我们使用spring-cloud-aws-jdbc 那么

第 1 点 如何连接主实例和只读副本实例

cloud.aws.rds.<DB-Instance-ID>.username=admin1
cloud.aws.rds.<DB-Instance-ID>.password=Admin123
cloud.aws.rds.<DB-Instance-ID>.databaseName=employee
cloud.aws.rds.employee-db.readReplicaSupport=true
Run Code Online (Sandbox Code Playgroud)

第2点

不需要定义单独的连接池

第3点

Spring Cloud AWS 将搜索为主数据库创建的任何只读副本,并将只读事务路由到可用的只读副本之一。

第4点

您可以通过以下方式重定向读取事务

@Transactional(readOnly = true)
Run Code Online (Sandbox Code Playgroud)

您可以在此处找到工作示例和详细说明