Java SpringBoot将请求放入队列,并等待其他请求首先完成
我在Java SpringBoot将请求放入队列,并等待其他请求首先完成,java,spring-boot,tomcat,Java,Spring Boot,Tomcat,我在springboot中有一个应用程序,当我加载一个网页时,它会点击一个服务并从中获得结果。由于在数据库中搜索,响应需要大约(10-15)秒的时间。因此,如果我关闭该网页并打开同一网页的另一个实例,Spring Boot会将该请求放入队列,并等待第一个请求完成,即使我已经关闭了该网页。另外,如果队列中有这么多请求,tomcat服务器将崩溃 到目前为止,我所做的是将application.properties中的tomcat线程修改为 server.tomcat.max-threads=20
springboot
中有一个应用程序,当我加载一个网页时,它会点击一个服务并从中获得结果。由于在数据库中搜索,响应需要大约(10-15)秒的时间。因此,如果我关闭该网页并打开同一网页的另一个实例,Spring Boot会将该请求放入队列,并等待第一个请求完成,即使我已经关闭了该网页。另外,如果队列中有这么多请求,tomcat服务器将崩溃
到目前为止,我所做的是将application.properties
中的tomcat线程修改为
server.tomcat.max-threads=20
那么,有没有其他方法可以让它成为多线程的
注意:请求的数量也可以超过20个
我正在为此应用程序使用Spring Boot 1.5.2
编辑:
我还有一个类似的应用程序运行在SpringBoot2中,该应用程序没有此类问题。两者的应用程序逻辑几乎相同,但第二次应用程序查询所需的时间稍短。更好的设计意味着服务具有两个端点:
如果您的数据库搜索需要10-15秒,您应该考虑加快搜索速度。你有合适的索引吗?分区?这是关系数据库吗?您使用的是哪个spring启动版本?@AmmarAli其1.5.2Tomcat是多线程的。您实际上是在减少线程数,将其设置为20,因为默认值为200。tomcat中没有队列,因此队列中没有任何内容。事实上,你能感觉到这样的事情并不意味着它就是。检查数据库,确保没有泄漏连接或有足够的可用连接,默认池大小为10。因此,如果您有10个以上的请求,则可能需要等待。@M.Deinum我同意您的看法,我将其限制为20个,但如果在某些请求之后我不将其限制,则服务器将崩溃。谢谢,我将检查我的数据库,然后用于您的应用程序异步处理(不,我不是指
@async
而是异步请求处理)。这样,您就可以有一个单独的线程池来执行这个长时间运行的查询(包括排队)这种方法似乎更好,但当我们发送第一个POST请求时,它仍将使用相同的处理能力,它将执行所有处理并将结果保存到某个位置,但当我们确实得到结果时,它只发送请求,因此我们最后不保存任何资源。是的,我们已经为我们的数据库建立了索引,但是我们有一些复杂的连接,这会导致搜索速度变慢,我们使用MySQL数据库,这是相对的。好处是改善了用户体验和线程清理。我会对这些问题运行解释计划。它们远远不是最优的。我敢打赌你正在进行扫描。