Spring @Async中的默认值是什么?

时间:2019-09-18 08:30:40

标签: java spring threadpoolexecutor spring-async

您能告诉我Spring @Async ThreadPoolTaskExecutor的默认参数是什么,还是我自己找到一个默认参数?

maxPoolSize,corePoolSize和queueCapcity的默认值是什么?

我应该重写它们以改善我的应用程序还是使用默认值就可以了?

4 个答案:

答案 0 :(得分:2)

我假设您想在春季使用@EnableAsyncjavadoc)注释来支持异步任务执行。

在这种情况下,文档说明以下内容:

默认情况下,Spring将搜索关联的线程池定义: 上下文中唯一的org.springframework.core.task.TaskExecutor bean,否则,否则命名为{task1ecutor“的java.util.concurrent.Executor bean。

如果两者都不可解决,则将使用org.springframework.core.task.SimpleAsyncTaskExecutor处理异步方法调用。

现在,如果您想提供自己的自定义,则可以定义(实现)AsyncConfigurerjavadoc),该方法基本上可以定义执行程序和异常处理程序(超出此问题的范围)

答案 1 :(得分:1)

关于npx的实现。您可以在其github存储库中进行检查。 ThreadPoolTaskExecutor

npx tsc --version

答案 2 :(得分:0)

根据Spring源代码@EnableAsync的注释按SimpleAsyncTaskExecutor进行配置,并且该配置不会重复使用线程,并且默认情况下随时都不会限制使用的线程数。

在提交作业的进程和线程池之间有一个队列。如果所有线程都被占用,则作业将仅排队。如果队列已满并且线程也被占用,则新任务将被拒绝。您可以选择几种拒绝策略(例如,呼叫者运行)。

如果您要查找真正的池,请查看SimpleThreadPoolTaskExecutorThreadPoolTaskExecutor

答案 3 :(得分:0)

@Async 使用的任务执行器的 bean 名称是 applicationTaskExecutor

applicationTaskExecutor 的属性在 TaskExecutionProperties

中定义
private int queueCapacity = Integer.MAX_VALUE;
private int coreSize = 8;
private int maxSize = Integer.MAX_VALUE;