其他分享
首页 > 其他分享> > Spring-Cloud,Hystrix和JPA – LazyInitializationException

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