Я создал кластер Aurora PostgreSQL в AWS:
+ 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:
| Endpoint name | Type |
|-------------------------------------------------------|--------|
| mydb.cluster-1234.ap-southeast-2.rds.amazonaws.com | Writer |
| mydb.cluster-ro-1234.ap-southeast-2.rds.amazonaws.com | Reader |
В моем приложенииЯ определил источник данных как обычно:
spring:
datasource:
url: jdbc:postgresql://mydb.cluster-1234.ap-southeast-2.rds.amazonaws.com:5432/someDb?currentSchema=someSchema
username: someUser
password: somePass
Опять же, в коде определены некоторые обычные сущности и репозитории:
public interface ThingRepository extends JpaRepository<Thing, Long> {
}
@Entity
public class Thing {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Basic
private String name;
// etc.
}
Аналогично, есть некоторые обычные READ / WRITEоперации:
public void doSomething() {
Thing thing = thingRepository.findById(123L);
// ...
}
public void doSomethingElse() {
Thing thing = new Thing();
thingRepository.save(thing);
// ...
}
Проблема в том, что все эти запросы отправляются экземпляру Aurora Writer, а мой экземпляр Reader остается неиспользованным.
Но я хочу вызовы методов, такие как findById
, existsById
, findAll
и т. Д. Для балансировки нагрузки между всеми экземплярами в моем кластере и только такими операциями, как save
, saveAll
, deleteById
, deleteAll
для отправки в экземпляр Writer.
Есть ли способ сделать это?