Spring-Cloud,Hystrix和JPA – LazyInitializationException
作者:互联网
我有以下问题尝试将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执行线程成为事务的一部分.我可以申请任何解决方法吗?
谢谢!
解决方法:
这是一个有点旧的线程,但也许有人遇到这个问题.关于这一点,github中有一个issue.
原因是,hystrix将在单独的线程中运行,这与前一个事务的位置不同.所以懒惰的事务和序列化将不起作用.
并且’THREAD’也是推荐的执行策略.因此,如果您想同时使用hystrix和事务,则应在2级调用中使用它们.比如,在第一级服务功能中,使用事务,在第二级服务功能中,使用hystrix并调用第一级事务功能.
标签:spring,jpa,spring-boot-2,spring-cloud-2,hystrix 来源: https://codeday.me/bug/20190708/1401514.html