1/8/2023 完成Spring 任务异步和调度部分的文档阅读

This commit is contained in:
2023-01-08 22:50:58 +08:00
parent 53cce93ee0
commit b1ff440a5f

View File

@@ -1,3 +1,22 @@
- [Spring Boot Async](#spring-boot-async)
- [Spring Executor和Scheduler的自动配置](#spring-executor和scheduler的自动配置)
- [Task Execution and Scheduling](#task-execution-and-scheduling)
- [Task Execution Abstraction](#task-execution-abstraction)
- [TaskExecutor接口的实现种类](#taskexecutor接口的实现种类)
- [TaskExecutor的使用](#taskexecutor的使用)
- [Spring TaskScheduler Abstraction](#spring-taskscheduler-abstraction)
- [Trigger接口](#trigger接口)
- [Trigger实现类](#trigger实现类)
- [TaskScheduler实现类](#taskscheduler实现类)
- [对任务调度和异步执行的注解支持](#对任务调度和异步执行的注解支持)
- [启用Scheduling注解](#启用scheduling注解)
- [@Scheduled注解](#scheduled注解)
- [@Async注解](#async注解)
- [@Async方法的异常处理](#async方法的异常处理)
- [Cron表达式](#cron表达式)
- [Macros](#macros宏)
# Spring Boot Async
## Spring Executor和Scheduler的自动配置
当当前上下文中没有Executor类型的bean对象时spring boot会自动配置一个ThreadPoolTaskExecutor类型的bean对象并且将该bean对象和异步task执行@EnableAsync和spring mvc异步请求处理关联在一起。
@@ -179,4 +198,41 @@ public class SampleBeanInitializer {
}
}
```
```
### @Async方法的异常处理
@Async方法的返回类型是Future类型时处理async方法执行时抛出的异常非常简单当在Future对象上调用get方法时异常会被抛出。**但当@Async方法的返回类型是void时执行时抛出的异常既无法被捕获也无法被传输。可以指定一个AsyncUncaughtExceptionHandler来处理此类异常。**
```java
public class MyAsyncUncaughtExceptionHandler implements AsyncUncaughtExceptionHandler {
@Override
public void handleUncaughtException(Throwable ex, Method method, Object... params) {
// handle exception
}
}
```
### Cron表达式
在Spring中cron表达式格式如下
\* \* \* \* \* \*
其代表为s,min,hour,day of month/\*(1~31)\*/,month/\*(1~12)\*/,day of week/\*(0~7,0 or 7 is sun)\*/)
> 规则如下:
> - 所有字段都可以用(*)来匹配所有值
> - 逗号(,)可以用来分隔同一字段中多个值
> - 分号(-可以用来指定范围指定的范围左右都包含eg1-5代表[1,5]
> - 在范围(或是*)后跟随下划线(/)代表间隔,如在分钟字段指定*/20代表该小时内每过20min
> - 对于月份或者day of week可以使用英文名的前三个字母来代替大小写不敏感
> - 在day of month或day of week字段中可以包含L字母
> - 在day of month字段L代表该月的最后一天在该字段还可以为L指定一个负的偏移量如L-n代表该月的倒数第n+1天
> - 在day of week字段L代表该周的最后一天L前还可以前缀月份的数字或是月份的前三个字母dL或DDDL如7L或sunL代表该月份的最后一个星期日),代该月份的最后一个day of week
> - day of month字段可以指定为nW代表离day of month为n最近的一个工作日如果n为周六则该该字段代表的值为周五的day of month如果n为周六则该字段代表下周一的day of month如果n为1其位于周六其也代表下周一的day of month1W代表该月的第一个工作日
> - 如果day of month的值为LW则代表该月的最后一个工作日
> - day of week字段还能指定为d#n或DDD#n的形式代表该月的的第几个d in week例如SUN#2代表当前月的第二个星期日
#### Macros
Cron表达式可读性不太好可以使用如下预定义的宏
| Macro | meaning |
|:-:|:-:|
| @yearly (or @annually) | once a year (0 0 0 1 1 *) |
| @monthly | once a month (0 0 0 1 * *) |
| @weekly | once a week (0 0 0 * * 0) |
| @daily (or @midnight) | once a day (0 0 0 * * *), or |
| @hourly | once an hour, (0 0 * * * *) |