Multithreading Spring引导应用程序能否同时处理多个请求?

Multithreading Spring引导应用程序能否同时处理多个请求?,multithreading,rest,spring-boot,spring-data-jpa,amazon-elastic-beanstalk,Multithreading,Rest,Spring Boot,Spring Data Jpa,Amazon Elastic Beanstalk,我正在用部署在AWS Beanstalk上的Spring Boot开发RESTAPI。这项服务可能每天都会受到成千上万客户的点击。因此,我想了解Spring引导处理多个请求的能力 从我在和中读到的内容来看,Spring Boot似乎可以并发处理请求,而控制器是线程安全的 如果同时向同一端点发出两个更新请求,那么控制器是一个接一个地处理这些请求,还是同时使用两个并行线程处理这些请求?如果是后者,每个线程是否都有自己的实体管理器?有没有一种方法可以实现线程池来根据EC2实例的容量限制线程的数量?顺便

我正在用部署在AWS Beanstalk上的Spring Boot开发RESTAPI。这项服务可能每天都会受到成千上万客户的点击。因此,我想了解Spring引导处理多个请求的能力

从我在和中读到的内容来看,Spring Boot似乎可以并发处理请求,而控制器是线程安全的


如果同时向同一端点发出两个更新请求,那么控制器是一个接一个地处理这些请求,还是同时使用两个并行线程处理这些请求?如果是后者,每个线程是否都有自己的实体管理器?有没有一种方法可以实现线程池来根据EC2实例的容量限制线程的数量?顺便问一下,如何根据估计的请求量来决定应该从多大的实例开始?

是的,Spring boot可以同时处理请求! 通过将
server.tomcat.max线程添加到
application.properties
application.yml
中,可以限制并发请求的数量。 Spring将管理连接池并处理实体管理器的分发(根据您在属性中指定的最小和最大连接数)。
我相信您可以在这里了解更多信息:

如果您正在使用Spring Boot开发web应用程序(我的意思是您已经将
Spring Boot starter web
的依赖项包含在pom文件中),Spring将自动嵌入web容器(默认情况下为Tomcat)它可以像普通的web容器一样同时处理请求

您还可以通过修改依赖项将默认web容器从Tomcat更改为Undertow或Jetty

正如@Felipe Mariano所说,您可以在下面的配置文件中限制不同web容器的最大工作线程数。
(1) 对于Tomcat:
server.Tomcat.max线程

(2) 对于下拖:
server.Undertow.worker线程


(3) 对于Jetty:
server.Jetty.acceptors

如果我是对的,则为每个请求创建一个servlet容器,并由每个单独的新派生线程处理,因此,从技术上讲,每个请求都是并行处理的。
您需要在应用程序属性文件中配置最大线程数。根据您的配置,Spring框架将负责线程池。谢谢

我将应用程序部署为war,它不使用嵌入式tomcat。这
server.tomcat.max threads
是否仍然有效?否。然后您必须单独配置servlet容器。哦,在这种情况下,max threads将不起作用,但您可以更改Elastic Beanstalk中的并发连接数!只需输入您的工作程序,转到
配置>工作程序配置
并更改
HTTP连接
字段。@FelipeMariano似乎找不到
工作程序配置
的位置。是否在Beanstalk控制台中定义了
SERVER\u PORT
和其他环境变量?噢!这里我使用一些Worker环境,我可以编辑Worker配置部分中的连接数(这里我在softwareconfiguration部分中定义了环境变量)。如果REST端点需要调用
JNI
函数,那么处理这个问题的最佳方法是什么?