Java Hibernate 查询中没有负载平衡注释
No load balance comment in Java Hibernate Query
我们在 Java 项目中使用 pgPool 在我们的 Postgres 数据库中进行负载平衡。
pgPool 向从服务器发送只读查询,向主服务器发送写查询。没关系。
但是在我们的应用程序中有非常特殊的情况,当我们需要仅在主服务器中执行查询时。
pgPool 提供了以下机制:
/*NO LOAD BALANCE*/ SELECT * FROM user;
上面的查询将始终在主服务器中执行。
我搜索了很多,但虽然可以在手动查询中设置评论(查询 class 中有一个 setComment()),但我找不到使用具有从方法名称创建的查询的 Hibernate 存储库。
示例:
public interface UserRepository extends Repository<User, Long> {
List<User> findByEmailAddressAndLastname(String emailAddress, String lastname);
}
如何在此查询中添加评论?
好吧,这并没有回答原来的问题,但我已经用不同的方法解决了这个问题。
我通过阅读 pgPool 文档的这一部分找到了解决方案:http://www.pgpool.net/docs/latest/pgpool-en.html#condition_for_load_balance
因此,使用 @Transactional 注释 Java 方法或 class 可实现将查询路由到主服务器的预期结果。
使用此注释时,pgPool 会将 WRITE 查询(包括)之后的所有查询路由到 Postgres 主服务器。
如果您没有 WRITE 查询,则可以通过使用 @Transactional(isolation=Isolation.SERIALIZABLE) 注释来获得结果 - 如果使用 Spring。但请注意,此隔离级别是可用的最严格的级别。
我们在 Java 项目中使用 pgPool 在我们的 Postgres 数据库中进行负载平衡。
pgPool 向从服务器发送只读查询,向主服务器发送写查询。没关系。
但是在我们的应用程序中有非常特殊的情况,当我们需要仅在主服务器中执行查询时。
pgPool 提供了以下机制:
/*NO LOAD BALANCE*/ SELECT * FROM user;
上面的查询将始终在主服务器中执行。
我搜索了很多,但虽然可以在手动查询中设置评论(查询 class 中有一个 setComment()),但我找不到使用具有从方法名称创建的查询的 Hibernate 存储库。
示例:
public interface UserRepository extends Repository<User, Long> {
List<User> findByEmailAddressAndLastname(String emailAddress, String lastname);
}
如何在此查询中添加评论?
好吧,这并没有回答原来的问题,但我已经用不同的方法解决了这个问题。
我通过阅读 pgPool 文档的这一部分找到了解决方案:http://www.pgpool.net/docs/latest/pgpool-en.html#condition_for_load_balance
因此,使用 @Transactional 注释 Java 方法或 class 可实现将查询路由到主服务器的预期结果。
使用此注释时,pgPool 会将 WRITE 查询(包括)之后的所有查询路由到 Postgres 主服务器。
如果您没有 WRITE 查询,则可以通过使用 @Transactional(isolation=Isolation.SERIALIZABLE) 注释来获得结果 - 如果使用 Spring。但请注意,此隔离级别是可用的最严格的级别。