考虑建微服务与 Spring Boot 2 .
最佳答案
从 Spring(应用程序上下文)的角度来看,如果没有另外指定,rest Controller 是一个单例。
所以 Controller 的代码必须准备好被多个线程同时调用。
当新请求到达服务器时,在传统的每请求线程模型中,Web 服务器(如 tomcat)负责从预定义的线程池中为请求分配一个线程。然后请求在此线程的上下文中由 Controller 处理。
实际的线程池实现通常会因服务器而异,但总的来说,它是可以配置的(每个循环的线程数,如果池已满,则存储请求以供将来处理的队列大小等)
现在关于 RestController 的作用域。如果 Controller 是无状态的(并且在许多情况下应该是无状态的,只需保持单例)。如果您需要为每个请求创建新的 Controller 实例,请更改范围。显然,每个线程都必须使用相同的(在单例范围的情况下)rest Controller 的实例,或者如果您指定另一个范围,spring mvc 将创建 Controller 的新实例。
上面的所有答案都适用于“传统的”每请求线程模型。
请注意,由于 spring 5/spring boot 2 spring 还支持带有 webflux 的“Reactive”模型。它在 netty 之上工作,并且不使用每个请求的线程模型。如果您对这个模型而不是我试图简要描述的传统模型感兴趣,请在问题中说明。
关于spring - Rest Controller 如何同时处理单个实例应用程序的多个请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56311512/