如果我有任务执行器,对我的 spring 启动应用程序有什么影响

What are impact to my spring boot application if I have task executor

我已经有了为我的 spring 启动应用程序配置最小和最大线程的配置

server.tomcat.threads.min=20
server.tomcat.threads.max=50

如果我的应用程序中有任务执行器,对我的 spring 启动应用程序有什么影响?

@Configuration
public class AsyncConfiguration {

@Bean("myExecutor")
public TaskExecutor getAsyncExecutor() {
    ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
    executor.setCorePoolSize(20);
    executor.setMaxPoolSize(1000);
    executor.setWaitForTasksToCompleteOnShutdown(true);
    executor.setThreadNamePrefix("Async-");
    return executor;
} }

这是两个不同的线程池:

  • server.tomcat.threads.*定义请求线程池(可知ServletAPI每个请求使用一个线程)

  • myExecutor 只是另一个可用于异步操作的池,例如通过 @EnableAsync/@Async:

By default, Spring will be searching for an associated thread pool definition: either a unique TaskExecutor bean in the context, or an Executor bean named "taskExecutor" otherwise. If neither of the two is resolvable, a SimpleAsyncTaskExecutor will be used to process async method invocations.

另请参阅 以了解有关将线程池与 Spring MVC/WebFlux.

一起使用的更多详细信息

因此,回答您的实际问题:两种配置不会相互干扰:)

据我了解

server.tomcat.threads.* : it tomcat thread pool which using for requests.

这意味着如果我有 2000 个请求,它只会创建 50 个线程作为我的配置。

myExcutor: it is using for Asynchronous. 

如果我想通过使用@Async 注释在后台处理日志记录错误,如果所有 2000 个请求都失败,它最多创建 1000 个线程。因此 tomcat 将管理 50 个线程作为主线程,而 Spring Container 将管理 1000 个线程。但是如果我不使用自定义任务执行器,它将使用 Spring 的默认值并创建 2000 个新线程。那样的话,我的应用程序会变慢