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--------");
    }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值