首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring Data JPA:如何在RDS Aurora PostgreSQL实例之间实现读查询负载均衡?

Spring Data JPA:如何在RDS Aurora PostgreSQL实例之间实现读查询负载均衡?
EN

Stack Overflow用户
提问于 2019-10-23 13:02:39
回答 2查看 1.2K关注 0票数 2

我已经在亚马逊网络服务中创建了一个Aurora PostgreSQL集群:

代码语言:javascript
复制
+ mydb (Role: Regional), (Engine: Aurora PostgreSQL), (Region and AZ: ap-southeast-2)
|
+- foo (Role: Writer),   (Engine: Aurora PostgreSQL), (Region and AZ: ap-southeast-2a), Multi-AZ (2 Zones)
|
+- bar (Role: Reader),   (Engine: Aurora PostgreSQL), (Region and AZ: ap-southeast-2b), Multi-AZ (2 Zones)

Writer实例有一个端点,Reader实例有一个端点:

代码语言:javascript
复制
| Endpoint name                                         | Type   |
|-------------------------------------------------------|--------|
| mydb.cluster-1234.ap-southeast-2.rds.amazonaws.com    | Writer |
| mydb.cluster-ro-1234.ap-southeast-2.rds.amazonaws.com | Reader |

在我的应用中,我像往常一样定义了一个数据源:

代码语言:javascript
复制
spring:
  datasource:
    url: jdbc:postgresql://mydb.cluster-1234.ap-southeast-2.rds.amazonaws.com:5432/someDb?currentSchema=someSchema
    username: someUser
    password: somePass

同样,代码中还定义了一些普通的实体和存储库:

代码语言:javascript
复制
public interface ThingRepository extends JpaRepository<Thing, Long> {
}

@Entity
public class Thing {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Basic
    private String name;

    // etc.
}

同样,还有一些普通的读/写操作:

代码语言:javascript
复制
public void doSomething() {
    Thing thing = thingRepository.findById(123L);
    // ...
}

public void doSomethingElse() {
    Thing thing = new Thing();
    thingRepository.save(thing);
    // ...
}

问题是所有这些查询都被发送到Aurora的Writer实例,而我的Reader实例仍未使用。

但我希望在集群中的所有实例之间实现findByIdexistsByIdfindAll等方法调用的负载均衡,并且只将savesaveAlldeleteByIddeleteAll等操作发送到编写器实例。

有没有办法做到这一点?

EN

回答 2

Stack Overflow用户

发布于 2019-10-23 13:31:41

您可以做的是设置两个数据源,并使用不同的数据源创建不同的存储库。

但是,对于JPA,这种方法有一个问题:如果您读取一个实体并对其进行操作,它将被保存,这可能不会起作用,至少在原始读取转到read实例时是不需要的。

因此,为了防止这种情况,您必须在加载实体后将其分离,如果在分离之前没有确保完全加载实体,这反过来将导致LazyLoadingException

票数 1
EN

Stack Overflow用户

发布于 2020-06-24 20:18:46

你试过使用Spring Cloud AWSData Access with JDBC#吗?

它提供了使用读复本配置连接到Aurora实例所需的全部内容

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58515780

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档