Создание объекта RequestScope из Spring App
У меня есть приложение весенней загрузки, обслуживающее запросы веб-API.
Приложение имеет перехватчик extending HandlerInterceptorAdapter
который считывает информацию из заголовков запроса и создает экземпляр ExecutionContext для запроса.
ExecutionContext является @Component
с @RequestScope
,
ExecutionContext - это @Autowired
в Сервисы на любом уровне - бизнес-сервис, весенние данные для AuditorAware и т. д., и все это работает красиво и надежно.
Теперь приложение хочет обрабатывать события из сервиса SQS сервиса AWS Cloud. Это работает так, что вы просто комментируете свой метод @SqsListener
и он начинает опрашивать очередь и читать события как String, которые можно анализировать в соответствующие объекты. По мере поступления событий они должны обрабатываться одними и теми же бизнес-службами и службами хранилища. Но бизнес-услуги имеют это RequestScoped Autowired ExecutionContext
который генерирует исключение, так как в этом сценарии нет HTTP-запроса.
Я попытался сделать поток ExecutionContext ограниченным, но это создает кучу других проблем. Есть ли другой способ решить эту проблему, кроме необходимости переписывать метод SQSListener, чтобы REST API обращался обратно в APP во время обработки событий, а не просто обращался к Сервисам напрямую?