spring - Spring Controllers 中的并发方法入口

标签 spring spring-mvc spring-boot

在最简单的 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/

相关文章:

java - 在 Spring Cloud Sleuth 中保持 CompletableFuture 的跟踪/跨度

java - 初学者 - Spring boot - 如何打印@RequestParam

java - 无法在 Spring 中通过属性占位符读取属性文件。出现系统找不到指定的文件错误

java - 如何在 Spring Boot 中测试 REST 端点是否返回数字?

java - 在从 String > 4k 创建的谓词中使用 Oracle clob

java - spring + jpa + hibernate,列出表中的所有行

java - Spring 3.0 禁用@Inject注解处理

java - @RequestBody 注释在 Spring 中不起作用并给出 NoSuchMethodError 错误

java - 根据 Gradle 文件中的配置文件区分依赖关系

spring-boot - Spring boot 项目发布到生产环境选择war(standalone tomcat)还是jar(embedded tomcat)?