springboot整合定时任务

1.启动类加上注解 @EnableScheduling 开启定时任务

2.编写task类,类上加上注解 @Component

3.编写方法加上注解 @Scheduled(fixedRate = 3000)

一个简单的定时任务完成

定时任务的三种方式:

1.fixedRate 固定频率任务:定义每过3秒执行任务,假设run()方法在第0秒开始执行,方法执行了12秒,那么下一次执行work()方法的时间是第12秒

@Scheduled(fixedRate = 3000)
public void run() throws InterruptedException {
   long start = System.currentTimeMillis();
   System.out.println("每隔3s执行一次,线程名称:" + Thread.currentThread().getName());
   Thread.sleep(5000);
   long end = System.currentTimeMillis();
   System.out.println("执行rate完毕,:" + Thread.currentThread().getName());
}

2.fixedDelay固定间隔任务:下一次的任务执行时间,是从方法最后一次任务执行结束时间开始计算。并以此规则开始周期性的执行任务,假设run2()方法在第0秒开始执行,方法执行了10秒,那么下一次执行work()方法的时间是第15秒

@Scheduled(fixedDelay = 5000)
public void run2()throws Exception{
   long start = System.currentTimeMillis();
   System.out.println("固定5s执行,线程名称:" + Thread.currentThread().getName());
   Thread.sleep(6000);
   long end = System.currentTimeMillis();
   System.out.println("执行delay完毕,:" + Thread.currentThread().getName());
}

3.Cron表达式:当方法的执行时间超过任务调度频率时,调度器会在下个周期执行。 秒 分 时 日 月 星期

  0/10 * * * * * 每30s执行一次   * 0/5 * * * * 每5分钟执行一次   0 0 0 * * * 每天零点执行

  0 0 8,,12,17 * * * 每天8,12,17点整执行   0 30 3-5 * * * 每天3到5点30分执行

@Scheduled(cron = "0/10 * * * * *")
public void run3() throws Exception{
   System.out.println("每10秒执行一次,线程名称:" + Thread.currentThread().getName());
   Thread.sleep(12000);
   System.out.println("执行cron完毕~~~~:" + Thread.currentThread().getName());
}

关于定时任务的串行和并行

串行任务:必须等上一个任务完成才能执行下一个任务,任务之间执行不稳定,执行没有顺序和规律,默认情况下是串行任务

并行任务:多个定时任务同时执行,需要配置TaskScheduler,因为TaskScheduler默认的线程数为1

什么都不做的情况下就是串行任务,对于需要同时执行的任务来说不适用,那么如何让定时任务并行执行?

只需要添加一个配置其他什么都不变就行了

@Configuration
public class TaskSchedulerThreadConfig {
    @Bean
    public TaskScheduler taskScheduler() {
        ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();
        taskScheduler.setPoolSize(5);
        return taskScheduler;
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值