springboot定时任务的两种实现方式

springboot定时任务的两种实现方式

spring自带定时任务处理器@Scheduled注解,所以springboot也可以用@Scheduled实现定时任务,第二种方式是使用Quartz框架

第一种@Scheduled

1.首先在你的springboot项目的pom文件中引入spring-boot-start-web,
2.然后在启动类里添加@EnableScheduling,开启定时任务
@SpringBootApplication
@EnableScheduling
public class ScheduledApplication{
    public static void main(String[] args) {
        SpringApplication.run(ScheduledApplication.class, args);
    }
}

3.新建一个定时任务类,加上@Component注解

@Component
public class ScheduledTask{

}

4.写定时任务的方法添加到定时任务类中,在方法上加上@Scheduled()注解,在@Scheduled的括号里可以用cron七子表达式来定义定时任务时间执行规则,也可以用fixedRate来定义定时任务时间执行规则,下面为用法

fixedRate 表示任务执行之间的时间间隔,具体是指两次任务的开始时间间隔,即第二次任务开始时,第一次任务可能还没结束。
fixedDelay 表示任务执行之间的时间间隔,具体是指本次任务结束到下次任务开始之间的时间间隔。
initialDelay 表示首次任务启动的延迟时间。
所有时间的单位都是毫秒,例如
@Scheduled(fixedRate=5000)
public void taskFixedRate(){
	System.out.println("该定时任务会每5秒执行一次")
}

cron表达式(0 0 0 * * ?)
括号中每一位数依次表示 秒|分|时|日|月|周|年
具体取值
秒 0-59 必填 允许通配符 - * /
分 0-59 必填 允许通配符- * /
时 0-23 必填 允许通配符- * /
日 1-31 必填 允许通配符- * ? / L W
月 1-12 必填 允许通配符- * /
周 1-7 必填 允许通配符- * ? / L #(周与日必须有一个为?,避免冲突)
年 1970-2099 非必填 允许通配符- * /

@Scheduled(cron="0 1 0 * * ?")
public void taskCron(){
	System.out.println("该定时任务会每分钟执行一次")
}

通配符的含义

? 表示不指定值,即不关心某个字段的取值时使用。需要注意的是,月份中的日期和星期可能会起冲突,因此在配置时这两个得有一个是 ?
* 表示所有值,例如:在秒的字段上设置 *,表示每一秒都会触发
, 用来分开多个值,例如在周字段上设置 "MON,WED,FRI" 表示周一,周三和周五触发
- 表示区间,例如在秒上设置 "10-12",表示 10,11,12秒都会触发
/ 用于递增触发,如在秒上面设置"5/15" 表示从5秒开始,每增15秒触发(5,20,35,50)
# 序号(表示每月的第几个周几),例如在周字段上设置"6#3"表示在每月的第三个周六,(用 在母亲节和父亲节再合适不过了)
周字段的设置,若使用英文字母是不区分大小写的 ,即 MON 与mon相同
L 表示最后的意思。在日字段设置上,表示当月的最后一天(依据当前月份,如果是二月还会自动判断是否是润年), 在周字段上表示星期六,相当于"7"或"SAT"(注意周日算是第一天)。如果在"L"前加上数字,则表示该数据的最后一个。例如在周字段上设置"6L"这样的格式,则表示"本月最后一个星期五"
W 表示离指定日期的最近工作日(周一至周五),例如在日字段上设置"15W",表示离每月15号最近的那个工作日触发。如果15号正好是周六,则找最近的周五(14号)触发, 如果15号是周未,则找最近的下周一(16号)触发,如果15号正好在工作日(周一至周五),则就在该天触发。如果指定格式为 "1W",它则表示每月1号往后最近的工作日触发。如果1号正是周六,则将在3号下周一触发。(注,"W"前只能设置具体的数字,不允许区间"-")
L 和 W 可以一组合使用。如果在日字段上设置"LW",则表示在本月的最后一个工作日触发(一般指发工资 )

第二种Quartz框架

待续。。。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值