在这里,我试图在AWS RDS中实现以下目标。我有一个正在运行的 MySQL 数据库实例。我正在考虑创建一个只读副本,以便我将拥有一些额外的负载共享功能。
我有一个在 EC2 上运行的 Spring 启动应用程序。目前,我连接到数据库的方式是在 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
我的问题是:
- 如果我创建只读副本,是否需要编写一些特殊代码来连接到它?
- 我是否需要多个连接池,每个数据库实例一个连接池?
- 从代码的角度来看,这如何扩展,如果我有 5 个只读副本,如何在代码中管理它?
- 如何将数据库调用定向到不同的副本?这一决定的依据是什么?
如果有任何链接/视频/文档,您可以指出我。Spring 启动不是必需的,我需要了解从 Java 应用程序利用只读副本的好方法是什么。
谢谢
如果我们使用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
要点 2
无需定义单独的连接池
要点 3
Spring Cloud AWS 将搜索为 master 数据库创建的任何只读副本,并将只读事务路由到其中一个可用的只读副本。
要点 4
您可以通过以下方式重定向读取事务
@Transactional(readOnly = true)
您可以在此处找到工作示例和详细解释