У меня есть приложение SpringBoot, использующее Web MVC.
Зависимости возникают следующим образом:
Код: Выделить всё
org.springframework.boot
spring-boot-starter-webflux
org.springframework.boot
spring-boot-starter-web
Приложение предоставляет Rest-Controller, например:
Код: Выделить всё
@RestController
public class EmployeeRestController {
@Autowired
private EmployeeService service;
@GetMapping("/api/employee/get/{id}")
public Employee getEmployee(@PathVariable("id") int id) {
return service.fetchEmployeeData(id);
}
}
Код: Выделить всё
@Service
public class EmployeeService {
private final WebClient webClient;
public EmployeeService(WebClient.Builder webClientBuilder) {
this.webClient = webClientBuilder.baseUrl("http://mydatasource.com/employees").build();
}
public Employee fetchEmployeeData(int id) {
Employee result = this.webClient
.get()
.url(id)
.retrieve()
.bodyToMono(Employee.class)
.block();
// do other service-related stuff here
return result;
}
}
Я пришел к выводу, что использование неблокирующих механизмов не имеет значения, поскольку Spring Web MVC работает в блокирующем стеке, следуя шаблону «один поток на запрос». Из-за этого операция блокировки будет блокировать только назначенный поток текущего запроса - верно? (Это подкреплено великолепной визуализацией в разделе 1 этого блога.)
Поэтому мой вопрос: правильно ли мое понимание/предположение? Если да, то как мне легко это доказать?
Подробнее здесь: https://stackoverflow.com/questions/788 ... lient-work
Мобильная версия