Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SpringBoot将请求放入队列,并等待其他请求首先完成_Java_Spring Boot_Tomcat - Fatal编程技术网

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中,该应用程序没有此类问题。两者的应用程序逻辑几乎相同,但第二次应用程序查询所需的时间稍短。

更好的设计意味着服务具有两个端点:

  • 允许用户向服务器发送请求并获取密钥令牌的POST URL。服务器将消息放入队列并返回令牌
  • 一个GET URL,允许用户发送令牌,如果没有从队列中返回响应,则返回或不返回响应
  • 您应该注册一个侦听器池,将请求从队列中移除,并将它们放入数据库(密钥-令牌/值对)。当用户发送令牌的GET请求时,服务器端在数据库中查找并返回结果


    如果您的数据库搜索需要10-15秒,您应该考虑加快搜索速度。你有合适的索引吗?分区?这是关系数据库吗?

    您使用的是哪个spring启动版本?@AmmarAli其1.5.2Tomcat是多线程的。您实际上是在减少线程数,将其设置为20,因为默认值为200。tomcat中没有队列,因此队列中没有任何内容。事实上,你能感觉到这样的事情并不意味着它就是。检查数据库,确保没有泄漏连接或有足够的可用连接,默认池大小为10。因此,如果您有10个以上的请求,则可能需要等待。@M.Deinum我同意您的看法,我将其限制为20个,但如果在某些请求之后我不将其限制,则服务器将崩溃。谢谢,我将检查我的数据库,然后用于您的应用程序异步处理(不,我不是指
    @async
    而是异步请求处理)。这样,您就可以有一个单独的线程池来执行这个长时间运行的查询(包括排队)这种方法似乎更好,但当我们发送第一个POST请求时,它仍将使用相同的处理能力,它将执行所有处理并将结果保存到某个位置,但当我们确实得到结果时,它只发送请求,因此我们最后不保存任何资源。是的,我们已经为我们的数据库建立了索引,但是我们有一些复杂的连接,这会导致搜索速度变慢,我们使用MySQL数据库,这是相对的。好处是改善了用户体验和线程清理。我会对这些问题运行解释计划。它们远远不是最优的。我敢打赌你正在进行扫描。