如果我有任务执行器,对我的 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 个新线程。那样的话,我的应用程序会变慢
我已经有了为我的 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 anExecutor
bean named "taskExecutor" otherwise. If neither of the two is resolvable, aSimpleAsyncTaskExecutor
will be used to process async method invocations.
另请参阅
因此,回答您的实际问题:两种配置不会相互干扰:)
据我了解
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 个新线程。那样的话,我的应用程序会变慢