CompletableFuture in Spring MVC

Я рассматриваю возможность использования CompletableFuture начать обработку чего-либо в базе данных. Операция займет несколько секунд, но я хочу вернуть управление обратно в браузер, не дожидаясь его завершения.

Мой вопрос: это безопасно? Есть ли риск, что мой Asynchronous задача будет собирать мусор, потому что первоначальный запрос вернул ответ?

1 ответ

Вы можете получить приведенное ниже исключение, когда запрос выполнен, и завершаемый будущий поток все еще выполняется. В частности, я видел эту ошибку при попытке получить данные из базы данных, так как компонент базы данных был определен с помощью прокси-сервера с заданными областями действия (сеанс).

java.lang.IllegalStateException: не найден связанный с потоком запрос:

Обходное решение:-

Вызвал другой сервис RESTFul для запуска задачи в новом запросе

SimpleAsyncTaskExecutor taskExecutor = new SimpleAsyncTaskExecutor();
CompletableFuture.supplyAsync(() -> callRestFulService(Integer.valueOf(id)),
                taskExecutor);

Заметка:-

Я только что поделился своим опытом. Могут быть и другие способы справиться с этим сценарием, или, если у вас нет взаимодействия с базой данных, он также может работать.

Другие вопросы по тегам