0

我一直在环顾四周,找不到任何好的解释或使用带有 EmbdeddedTomcat 容器的 Spring 4.x (Springboot) 并手动设置此处startStopThreads描述的属性的示例

我注意到我们的应用程序的启动延迟随着时间的推移而变得更糟,但也看到(在日志中)标记为线程池的线程池[localhost-startStop-1]是唯一执行超过[main]. 我想在这个池中添加更多线程来加速我们的异步启动。

有人可以帮我解决Tomcat的startStopThreads问题吗?


更新 -
一个很好的用例是在启动时动态创建 DynamoDb 表。创建代码包含在一个Executor.submit调用中,但是日志显示这些是串行执行的。以下是日志中内容的示例:

2017-02-22 15:000:000:01,000 [main                 ] INFO Creating table 1 
2017-02-22 15:000:000:05,000 [localhost-startStop-1] INFO Creating table 2
2017-02-22 15:000:000:10,000 [localhost-startStop-1] INFO Creating table 3

不幸的是,我从来没有看到localhost-startStop-2执行任何东西,如果它在线程池中应该

4

1 回答 1

1

配置startStopThreads不会有任何影响。Tomcat 中的每个容器(服务、主机、上下文等)在启动子容器时都会使用它。如果有多个线程可用,则具有多个子级的容器将并行启动它们。它在典型的 Spring Boot 应用程序中不会有任何影响,因为每个 Tomcat 容器只有一个子容器。

与其尝试使用 Tomcat 的线程并行执行一些初始化,我建议使用 JavaExecutorSpring 框架的TaskExecutor.

于 2017-02-22T23:13:38.630 回答