У меня возникла следующая проблема при попытке интегрировать 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(...);
}
Так что это работает, как и ожидалось, настоящая проблема возникает, когда я возвращаю Entity клиенту. Я использую OpenEntityManagerInViewFilter, поэтому я могу сериализовать свою модель с ее отношениями. Когда я использую @HystrixCommand в своем сервисном методе, я получаю исключение LazyInitializatioException при попытке сериализации.
Я знаю причину (или, по крайней мере, я подозреваю, в чем проблема), и это потому, что Hystrix выполняется в другом потоке, поэтому он не является частью транзакции. Изменение стратегии изоляции Hystrix с THREAD на SEMAPHORE работает правильно, поскольку это тот же поток, но я понимаю, что это неправильный подход к проблеме.
Итак, мой вопрос: как я могу сделать исполняемый поток Hystrix частью транзакции. Есть ли обходной путь, который я могу применить?
Спасибо!