gpt4 book ai didi

Spring-Cloud、Hystrix 和 JPA - LazyInitializationException

转载 作者:行者123 更新时间:2023-12-01 05:05:26 24 4
gpt4 key购买 nike

我在尝试将 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 执行线程成为事务的一部分。有什么我可以申请的解决方法吗?

谢谢!

最佳答案

这是一个有点旧的线程,但也许有人也遇到了这个问题。有一个issue在github上关于这个。

原因是,hystrix 会在单独的线程中运行,这与之前的事务所在的位置不同。所以懒惰的事务和序列化将不起作用。

“线程”也是推荐的执行策略。所以如果你想同时使用 hystrix 和事务,你应该在 2 级调用中使用它们。比如,在一级服务函数中,使用事务,在二级服务函数中,使用 hystrix 并调用一级事务函数。

关于Spring-Cloud、Hystrix 和 JPA - LazyInitializationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29290382/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com