Spring Boot блокирует работу базы данных? - PullRequest
0 голосов
/ 18 октября 2018

Я создаю внутренний сервер с Spring Boot и MongoDB, в основном в соответствии с этим руководством https://spring.io/guides/gs/accessing-mongodb-data-rest/.

Все мои репозитории снабжены аннотацией @RepositoryRestResource.Контроллеры для каждого репозитория REST снабжены аннотацией @ RestController.

Мой вопрос заключается в том, являются ли операции с базой данных в приложении REST в Spring Boot блокирующими или неблокирующими?То есть потоки, которые обрабатывают один конкретный HTTP-запрос (например, GET), просто бездействуют, ожидая ответа от MongoDB, или они тем временем возобновляют работу в каком-то пуле потоков?

Я искалдокументация, но я не мог найти спецификацию для модели потока в этом случае.Я также искал учебные пособия на тему «Создание асинхронного приложения в Spring Boot», но, похоже, они не совсем охватили эту конкретную проблему.

1 Ответ

0 голосов
/ 19 октября 2018

Веб-слой может быть блокирующим на неблокирующим , в зависимости от используемого вами стека.

Если вы используете блокирующий стек для своегоВеб-слой (например, основанный на spring-boot-starter-web ) можно использовать DeferredResult, чтобы убедиться, что у вас не закончились потоки обработки запросов.

См. Фрагмент ниже для примера использования:

@RestController
public class EntityController {

    private ExecutorService executor;

    @GetMapping
    public DeferredResult<Entity> getEntity(/**params**/) {
        DeferredResult<Entity> result = new DeferredResult<>();
        // request thread freed and returned to the request handling thread pool
        executor.execute(() -> output.setResult(entity)
        return result;
    }

}

Полный пример по DeferredResult см. в этом руководстве

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...