【问题标题】:Parallel requests be processed parallel/sequential by one Spring singleton bean并行请求由一个 Spring 单例 bean 并行/顺序处理
【发布时间】:2017-03-27 02:26:27
【问题描述】:
【问题讨论】:
标签:
spring
singleton
stateless
【解决方案1】:
并行请求会被并行/顺序处理一个吗
Spring 单例 bean,例如例如@Controller, @Service ?
@Controller、@Service 的请求将由 J2EE 容器创建的不同线程并行处理。 J2EE 容器可以创建的线程数限制为内存可用性。
单个对象可以处理任意数量的请求(受上述可用内存的限制)。
为了更好地理解这个概念,你可以使用 Spring MVC 的DispatcherServlet(或任何具有默认行为的Servlet),它将是一个由 Servlet Container 创建的单例对象,同时每个 Servlet 可以并发处理多个请求(来自用户/客户端)。
因此,如果您想控制单个 bean 对象(Service/Controller/DAO,无论哪个对象)处理的请求数,那么需要限制请求或简单地添加同步到bean的方法(或关键部分)。但是,一般来说,不建议这样做,除非您遇到一些问题或处理原子性(将多个事务作为单个工作单元处理)。
【解决方案2】:
通常情况下,您的 Spring 单例类由不同的线程并行处理。
Spring bean 是存储在 spring 上下文中的简单 java 对象(可能被包装)。以及如何并行处理该对象的每个简单 java 对象。
在一些特殊情况下可能会被顺序处理,例如当你使用一些锁、同步方法和其他阻塞语句时。