Spring定时任务

一、如何使用

  1. 编写定时任务类,加入IOC,一般使用@Component注解。
  2. 在定时任务方法上使用@Scheduled注解,使用cron表达式标明运行时间设置,或使用fixedRate和fixedDelay
  3. 在Springboot启动类上加@EnableScheduling注解开启定时任务。

二、说明

cron表达式:
格式:
{秒数} {分钟} {小时} {日期} {月份} {星期} {年份(可为空)}
在这里插入图片描述
特殊字符意义:
下面的单位以秒为例:

“*” 代表每隔1单位触发

“,” 代表在指定的单位触发,比如"10,20,30"代表10秒、20秒和30秒时触发任务

“-” 代表在指定的范围内触发,比如"5-10"代表从5秒开始触发到10秒结束触 发,每隔1秒触发

“/” 代表触发步进,"/“前面的值代表初始值(”“等同"0”),后面的值代表偏移量,比如"0/25"或者"/25"代表从0秒开始,每隔25秒触发1次,"10-45/20"代表在[10,45]内步进20秒命中的时间点触发,即10秒触发1次,30秒触发1次。

fixedRate和fixedDelay
1)fixedDelay设置的是:上一个任务结束后多久执行下一个任务;
2)fixedRate设置的是:上一个任务的开始到下一个任务开始时间的间隔;

三、定时任务介绍

java三种定时任务:

  1. Timer :存在缺陷:建议使用ScheduledThreadExecutor代替。

    1. 基于绝对时间,如系统时钟改变会出现问题。
    2. 只会创建单线程执行任务,如果一个任务执行时间过长,超过下次开始时间,会导致任务丢失或执行时间不准确。
    3. 如果TimerTask抛出未检查的异常,Timer将会产生无法预料的行为。Timer线程并不捕获异常,所以TimerTask抛出的未检查的异常会终止timer线程。其余任务无法执行。
  2. ScheduledThreadExecutor 基于相对时间,定时任务线程池。

  3. spring schedule 默认单线程,可以配置多线程。

    <task:scheduler id="dataScheduler" pool-size="5"/>
    
  4. quartz :企业级,功能强大。支持集群,可随时修改。
    可参考:Spring Boot Quartz 使用介绍

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值