Spring控制器中的并发方法条目

P M*_*cki 5 spring spring-mvc spring-boot

在最简单的Spring(Boot)应用程序中,我会观察到控制器的以下行为

@CrossOrigin
@RestController
public class MyController {
  //...
  @RequestMapping(value = {"/lazy-dog"})
  @ResponseBody
  public Rest lazyDog() {
      //... 
      Thread.sleep(10000);
      //
      return Message("Dog exiting")
  }

  @RequestMapping(value = {"/quick-fox"})
  @ResponseBody
  public Rest quickFox() {
      //...
      return Message("Fox exiting")
  }

}
Run Code Online (Sandbox Code Playgroud)

即:同步进入lazyDog()是不允许的(从两个浏览器标签调用两次持续20sec),而并发执行lazyDog(),并quickFox()允许(如狗等待,狐狸可以快速执行,说在不同的浏览器选项卡).

应该做些什么来允许并发执行两个或多个调用lazyDog()

注意:我目前正在通过以下方式启动该应用:

@SpringBootApplication
public class Application extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
    return application.sources(Application.class);
}

public static void main(String[] args) {
    SpringApplication.run(Application.class, args);
    }
}
Run Code Online (Sandbox Code Playgroud)

Mad*_*apu 4

我相信您必须通过在单个浏览器(或单个浏览器供应商)中打开两个选项卡来进行测试。您可以尝试同时在不同的两个浏览器供应商(例如 Chrome & IE 或 Chrome & Firefox 等)中访问 URL。

我怀疑它很可能是浏览器特定的并发 HTTP 请求发送到同一主机/url 的实现。