springboot 定时任务@Scheduled cron表达式、fixedRate、fixedDelay、initialDelay和@EnableAsync、@Async的结合使用

定时任务几种形式

1,cron自定义表达式


    @Scheduled(cron = "${statistics.ams.day-cron}")
    private void test() {
    
    
        System.out.println("doSomeThing--------");
    }

默认的执行方式是与fixedDelay相近的,也是会按照上一次方法结束时间开始算起。
但可以改成多线程异步方式执行,这样每次执行相互间就没有影响了:

  1. 使用类或者启动类添加@EnableAsync注解
@EnableScheduling
@EnableFeignClients
@EnableAsync
public class Application {
    
    

    public static void main(String[] args) {
    
    
        Application.run(Application.class, args);
    }

}
  1. 方发上添加@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 :

  1. 下一次在上一次执行完才在指定的时间间隔后执行。
  2. 如果有阻塞就一直等,直到上一次执行完才在指定的时间间隔后执行。
  3. 如果代码抛异常(相当于方法执行完了,不会被全局异常处理(@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:

  1. 下一次在上一次执行开始算起,在指定的时间间隔执行。
  2. 如果有阻塞,下一次也是不会执行,但是在阻塞这段时间内累计应该执行的次数,当不再阻塞时,一下子把这些全部执行掉,而后再按照固定速率继续执行。
  3. 如果代码抛异常(相当于方法执行完了,不会被全局异常处理(@ControllerAdvice)捕获),继续下一次执行。
    @Scheduled(initialDelay = 0, fixedRateString = "${statistics.ams.week-during}")
    private void test2() {
    
    
        System.out.println("doSomeThing--------");
    }

猜你喜欢

转载自blog.csdn.net/xc_nostalgia/article/details/111406565