2

我们在 Java 项目中使用 pgPool 在 Postgres 数据库中进行负载平衡。

pgPool 将只读查询发送到从服务器并将查询写入主服务器。那没问题。

但是在我们的应用程序中有非常特殊的情况,当我们只需要在主服务器中执行查询时。

pgPool 提供以下机制:

/*NO LOAD BALANCE*/ SELECT * FROM user;

上面的查询将始终在主服务器中执行。

我进行了很多搜索,但是虽然可以在手动查询中设置注释(Query 类中有一个 setComment()),但我找不到使用 Hibernate 存储库和从方法名称创建的查询的方法。

例子:

public interface UserRepository extends Repository<User, Long> {
    List<User> findByEmailAddressAndLastname(String emailAddress, String lastname);
}

如何在此查询中添加评论?

4

1 回答 1

0

好吧,这不能回答最初的问题,但我已经使用不同的方法解决了这个问题。

我通过阅读 pgPool 文档的这一部分找到了解决方案:http ://www.pgpool.net/docs/latest/pgpool-en.html#condition_for_load_balance

因此,使用 @Transactional 注释 Java 方法或类可以实现将查询路由到主服务器的预期结果。

使用此注解时,pgPool 会将在 WRITE 查询(包括)之后进行的所有查询路由到 Postgres 主服务器。

如果您没有 WRITE 查询,则可以通过使用 @Transactional(isolation=Isolation.SERIALIZABLE) 注释来获得结果 - 如果使用 Spring。但请注意,此隔离级别是可用的最严格的。

于 2016-09-09T20:54:08.673 回答