Task Execution and Scheduling In SpringBoot
开天辟地
In the absence of an Executor bean in the context, Spring Boot auto-configures a ThreadPoolTaskExecutor with sensible defaults that can be automatically associated to asynchronous task execution (@EnableAsync) and Spring MVC asynchronous request processing.
在上下文中没有Executor bean的情况下,Spring Boot会自动配置一个ThreadPoolTaskExecutor,其中包含合理的默认值,可以自动关联到异步任务执行(@EnableAsync)和Spring MVC异步请求处理。
By default, Spring uses a SimpleAsyncTaskExecutor to actually run these methods asynchronously. But we can override the defaults at two levels: the application level or the individual method level.
Spring使用SimpleAsyncTaskExecutor来实际以异步方式运行这些方法。但是我们可以在两个级别上覆盖默认设置:应用程序级别或单个方法级别。
在@EnableAsync的javadoc中也有相关的一段话作为关联佐证:
By default, Spring will be searching for an associated thread pool definition: either a unique org.springframework.core.task.TaskExecutor bean in the context, or an java.util.concurrent.Executor bean named "taskExecutor" otherwise. If neither of the two is resolvable, a org.springframework.core.task.SimpleAsyncTaskExecutor will be used to process async method invocations. Besides, annotated methods having a void return type cannot transmit any exception back to the caller. By default, such uncaught exceptions are only logged.
要么是上下文中唯一的 org.springframework.core.task.TaskExecutor bean,要么是名为 "taskExecutor" 的 java.util.concurrent.Executor bean。如果这两者都无法解析,则会使用 org.springframework.core.task.SimpleAsyncTaskExecutor 来处理异步方法调用。此外,具有 void 返回类型的注释方法无法将任何异常传递回调用者。默认情况下,这样的未捕获异常仅会被记录日志。
解答
Spring Boot会自动配置一个ThreadPoolTaskExecutor, 它属于TaskExecutor, 如果是唯一的话就满足了相关条件, 不会再使用org.springframework.core.task.SimpleAsyncTaskExecutor运行@Async的方法
1. Task Execution
1.1. 注解
- @EnableAsync/@Async
 
1.2 重点类
ThreadPoolTaskExecutor
1.3 常规配置
spring.task.execution.pool.max-size=16
spring.task.execution.pool.queue-capacity=100
spring.task.execution.pool.keep-alive=10s
1.4 额外配置
默认的拒绝策略是AbortPolicy, 如果要修改的话就没有办法通过application.yaml设置了, 需要参考- How To Do @Async in Spring
2. Task Scheduling
1.1 注解
- @EnableScheduling/@Scheduled
 
1.2 重点类
ThreadPoolTaskScheduler
1.3 常规配置
spring.task.scheduling.thread-name-prefix=scheduling-
spring.task.scheduling.pool.size=2
1.4 额外配置
一般不涉及额外配置
Task Execution and Scheduling In SpringBoot的更多相关文章
- Spring 5.x 、Spring Boot 2.x 、Spring Cloud 与常用技术栈整合
		
项目 GitHub 地址:https://github.com/heibaiying/spring-samples-for-all 版本说明: Spring: 5.1.3.RELEASE Spring ...
 - Spring 4 官方文档学习 Spring与Java EE技术的集成
		
本部分覆盖了以下内容: Chapter 28, Remoting and web services using Spring -- 使用Spring进行远程和web服务 Chapter 29, Ent ...
 - 【Spring】Spring的定时任务
		
> 参考的优秀文章 Task Execution and Scheduling > 版本说明 <dependencies> <dependency> <gro ...
 - Spring 5 (0) - Introduction & Index
		
Spring Framework Reference Documentation I. Overview of Spring Framework . Getting Started with Spri ...
 - Spring框架文档与API(4.3.6版本)
		
http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/ Table of Contents I ...
 - springboot集成schedule(深度理解)
		
背景 在项目开发过程中,我们经常需要执行具有周期性的任务.通过定时任务可以很好的帮助我们实现. 我们拿常用的几种定时任务框架做一个比较: 从以上表格可以看出,Spring Schedule框架功能完善 ...
 - SpringBoot标准Properties
		
# =================================================================== # COMMON SPRING BOOT PROPERTIE ...
 - springboot application.properties 常用完整版配置信息
		
从springboot官方文档中扒出来的,留存一下以后应该会用到 # ================================================================= ...
 - springboot集成schedule
		
背景 在项目开发过程中,我们经常需要执行具有周期性的任务.通过定时任务可以很好的帮助我们实现. 我们拿常用的几种定时任务框架做一个比较: 从以上表格可以看出,Spring Schedule框架功能完善 ...
 - java框架之SpringBoot(2)-配置
		
规范 SpringBoot 使用一个全局的配置文件,配置文件名固定为 application.properties 或 application.yml .比如我们要配置程序启动使用的端口号,如下: s ...
 
随机推荐
- [UML]PlantUML安装使用指南
			
1 概述 PlantUML 支持在多个平台上安装使用,比如 Eclipse,NetBeans,oneline servlet 等,它也支持多种语言的编辑,例如 C/C++, PHP,Java ...
 - C++ 标准库 sort() / stable_sort() / partial_sort() 对比
			
C++ STL标准库中提供了多个用于排序的Sort函数,常用的包括有sort() / stable_sort() / partial_sort(),具体的函数用法如下表所示: 函数 用法 std::s ...
 - 【Spring专题】「技术原理」从源码角度去深入分析关于Spring的异常处理ExceptionHandler的实现原理
			
ExceptionHandler的作用 ExceptionHandler是Spring框架提供的一个注解,用于处理应用程序中的异常.当应用程序中发生异常时,ExceptionHandler将优先地拦截 ...
 - C++ 测试框架 GoogleTest 初学者入门篇 丙
			
theme: channing-cyan *以下内容为本人的学习笔记,如需要转载,请声明原文链接微信公众号「ENG八戒」https://mp.weixin.qq.com/s/RIztusI3uKRno ...
 - 如何在模型中引入可学习参数(Pytorch)
			
错误实例: def init(self): self.w1 = torch.nn.Parameter(torch.FloatTensor(1),requires_grad=True).cuda() s ...
 - TIM-PWM输出,占空比改变时机对输出波形的影响
			
一.实验概述 以下说明描述三种改变PWM占空比的方式,对于当前PWM输出波形的影响 1.禁止预装载功能,在PWM某一周期波形输出过程中改变占空比值(ccp) 2.禁止预装载功能,在PWM某周期波形输出 ...
 - Java开发准备
			
1.Java是一门面向对象的高级语言 JDK:是java development kit的缩写,意思是java程序开发的工具包. 可以用来开发Java和运行Java程序 JRE:Java Runtim ...
 - vue3组合式API介绍
			
为什么要使用Composition API? 根据官方的说法,vue3.0的变化包括性能上的改进.更小的 bundle 体积.对 TypeScript 更好的支持.用于处理大规模用例的全新 API,全 ...
 - WPF 引用字体文件资源
			
外部字体文件 1.后台代码引用字体 将一个名为"ChineseCharacterSpecialFont.ttf"的ttf文件,放在桌面路径,后台引用方式如下: 1 var ttfF ...
 - dp杂题选做
			
树的数量 题目其实挺简单的,难点在于状态的设计(其实也没多难). 令 \(f_i\) 表示 \(i\) 个点的 \(m\) 叉树的数量,发现无法转移.设 \(g_{i,j}\) 表示根节点所在子树内有 ...