我在尝试将 Hystrix 集成到现有的 Spring Boot 应用程序中时遇到以下问题。我正在使用带有 spring 数据(jpa 存储库)的引导。该应用程序的结构非常简单,我们有资源 -> 服务 -> 存储库。
我启用了 Hystrix 支持并注释了返回实体的服务方法之一,如下所示:
@HystrixCommand(fallback="getDealsFallback")
public Page<Deal> getDeals(...) {
// Get the deals from the Index Server.
return indexServerRepository.findDealsBy(...);
}
public Page<Deal> getDealsFallback(...) {
// If IndexServer is down, query the DB.
return dealsRepository.findDealsBy(...);
}
所以这可以按预期工作,真正的问题实际上存在于我将实体返回给客户端时。我正在使用 OpenEntityManagerInViewFilter 所以我可以用它的关系序列化我的模型。当我在我的服务方法中使用 @HystrixCommand 时,当它尝试序列化时我得到一个 LazyInitializatioException 。
我知道原因(或者至少我怀疑是什么问题),并且是因为 Hystrix 在另一个线程中执行,所以不是事务的一部分。将 Hystrix 隔离策略从 THREAD 更改为 SEMAPHORE,因为它是同一个线程,所以可以正常工作,但我知道这不是解决问题的正确方法。
所以我的问题是,我怎样才能让 Hystrix 执行线程成为事务的一部分。有什么我可以申请的解决方法吗?
谢谢!