我正在使用部署在AWS Beanstalk上的Spring Boot开发Rest API。这项服务可能每天都会受到成千上万客户的欢迎。因此,我想了解Spring Boot处理多个请求的能力。
从我在Spring-Boot: Handle multiple requests concurrently和How to have thread safe controller in spring boot中读到的内容来看,Spring Boot可以同时处理请求,同时控制器是线程安全的。
如果同时向同一端点发出两个请求以进行更新,控制器是一个接一个地处理请求还是同时处理两个并行线程?如果是后者,每个线程都有自己的实体管理器吗?有没有办法实现线程池来根据EC2实例的容量限制线程数?顺便说一下,我如何根据估计的请求数量决定一个实例的大小?
答案 0 :(得分:8)
是的,Spring启动可以同时处理请求!
您可以通过将server.tomcat.max-threads
添加到application.properties
或application.yml
来限制并发请求的数量。
Spring将管理连接池并处理实体管理器的分发(根据您在属性中指定的最小和最大连接数)。
我相信你可以在这里阅读更多相关内容:When are connections returned to the connection pool with Spring JPA (Hibernate) Entity Manager?
答案 1 :(得分:1)
如果您正在使用Spring Boot开发Web应用程序(我的意思是您已将spring-boot-starter-web
的依赖项包含在您的pom文件中),Spring将自动嵌入Web容器(默认为Tomcat)并且它可以同时处理请求就像常见的Web容器一样。
您还可以通过修改依赖项将默认Web容器从Tomcat更改为Undertow或Jetty。
正如@Felipe Mariano所说,您可以在下面的配置文件中限制不同Web容器的最大工作线程数。
(1)对于Tomcat:server.tomcat.max-threads
(2)对于Undertow:server.undertow.worker-threads
(3)对于Jetty:server.jetty.acceptors
答案 2 :(得分:0)
如果我是对的话,有一个为每个请求创建的servlet容器,并由每个单独的新生成的线程处理,因此,从技术上讲,每个请求都是并行处理的。 您需要在应用程序属性文件中配置最大线程数。根据您的配置,Spring Framework将注意线程池。谢谢