在最简单的 Spring(引导)应用程序中,我观察到 Controller 的以下行为,例如
@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")
}
}
即:并发进入
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);
}
}
最佳答案
我相信您必须通过在单个浏览器(或单个浏览器供应商)中打开两个选项卡来进行测试。您可以尝试同时访问不同的两个浏览器供应商(例如 Chrome 和 IE 或 Chrome 和 Firefox 等)中的 URL。
我怀疑它很可能是浏览器特定的同时发送到同一主机/url 的 HTTP 请求的实现。
关于spring - Spring Controllers 中的并发方法入口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35298066/