定时任务几种形式
1,cron自定义表达式
@Scheduled(cron = "${statistics.ams.day-cron}")
private void test() {
System.out.println("doSomeThing--------");
}
默认的执行方式是与fixedDelay相近的,也是会按照上一次方法结束时间开始算起。
但可以改成多线程异步方式执行,这样每次执行相互间就没有影响了:
- 使用类或者启动类添加@EnableAsync注解
@EnableScheduling
@EnableFeignClients
@EnableAsync
public class Application {
public static void main(String[] args) {
Application.run(Application.class, args);
}
}
- 方发上添加@Async注解
@Scheduled(cron = "${statistics.ams.day-cron}")
@Async
private void test() {
System.out.println("doSomeThing--------");
}
2,fixedDelay(fixedDelayString) 单位:毫秒
不能用@Async注解,会报错。
initialDelay = 10000 意思就是在容器启动后,延迟10秒后再执行一次定时器
fixedDelay 接收长整形数字。
fixedDelayString 接收字符串数字(通常直接取配置文件里的值)。
fixedDelay :
- 下一次在上一次执行完才在指定的时间间隔后执行。
- 如果有阻塞就一直等,直到上一次执行完才在指定的时间间隔后执行。
- 如果代码抛异常(相当于方法执行完了,不会被全局异常处理(@ControllerAdvice)捕获),继续下一次执行。
@Scheduled(initialDelay = 0, fixedDelayString = "${statistics.ams.week-during}")
private void test2() {
System.out.println("doSomeThing--------");
}
3,fixedRate(fixedRateString)单位:毫秒
不能用@Async注解,会报错。
initialDelay = 10000 意思就是在容器启动后,延迟10秒后再执行一次定时器
fixedRate接收长整形数字(@Scheduled( initialDelay = 0, fixedRate=5000L))//5秒。
fixedRateString接收字符串数字(通常直接取配置文件里的值)。
fixedRate:
- 下一次在上一次执行开始算起,在指定的时间间隔执行。
- 如果有阻塞,下一次也是不会执行,但是在阻塞这段时间内累计应该执行的次数,当不再阻塞时,一下子把这些全部执行掉,而后再按照固定速率继续执行。
- 如果代码抛异常(相当于方法执行完了,不会被全局异常处理(@ControllerAdvice)捕获),继续下一次执行。
@Scheduled(initialDelay = 0, fixedRateString = "${statistics.ams.week-during}")
private void test2() {
System.out.println("doSomeThing--------");
}