这是我参与8月更文挑战的第28天,活动详情查看:8月更文挑战
我们在实际项目的开发中或多或少会使用定时任务,如果是电商项目,那么订单、支付相关的定时任务更是随处可见,每天、每时、每刻都有可能在执行定时任务。为了使用灵活方便,所以我们为定时任务添加了可视化操作,为了观察定时任务的执行结果,又引入了定时任务监控系统。可以说定时任务在项目还是有一席之地的,今天我们就先来学习一下在SpringBoot项目中如何创建一个定时任务。
使用@Scheduled注解实现定时任务
@EnableScheduling注解
使用@Scheduled注解方式实现定时任务时,首先要在启动类上添加@EnableScheduling注解,该注解表示开启定时任务,并在项目执行时发现标注@Scheduled注解的方法执行。
@Scheduled注解
开启定时任务后,接下来需要创建一个定时任务类,使用@Component注解将其交给Spring容器进行管理,在类中定义方法并使用@Scheduled注解标注,并设置方法的定时执行规律。
@Component
public class TestTask {
@Scheduled(fixedRate = 2000)
public void printHello(){
System.out.println(System.currentTimeMillis() + " : " + "hello!");
}
}
设置完成后,启动SpringBoot项目,会自动根据设置的规则执行定时任务
对于@Scheduled注解,我们可以看一下定义
@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Repeatable(Schedules.class)
public @interface Scheduled {
String CRON_DISABLED = "-";
String cron() default "";
String zone() default "";
long fixedDelay() default -1L;
String fixedDelayString() default "";
long fixedRate() default -1L;
String fixedRateString() default "";
long initialDelay() default -1L;
String initialDelayString() default "";
}
注解中可以使用的时间规则有:
@Scheduled(fixedRate = 2000):每次执行间隔2秒@Scheduled(fixedDelay = 2000):每次执行完成后,间隔2秒再次执行@Scheduled(initialDelay = 2000, fixedRate = 3000):第一次执行延迟2秒,之后每3秒执行一次@Scheduled(cron = "* * * * * *"):cron表达式,表示(每年每月每周每日每时每分)每秒都要执行一次
cron表达式
在定时任务中使用cron表达式来设置定时规则能够更加灵活的设置定执行时间,cron表达式的使用方法为:秒 分 时 日 月 周 年(可省略),每个位置的取值范围和可用符号有:
对于其中的特殊符号,其代表含义为:
,:该字符可以指定多个值,如"5,10 * * * * *"表示每分钟的5秒、10秒时执行定时任务-:该字符可以指定一个范围值,如"5-8 * * * * *"表示每分钟的5、6、7、8秒时会执行定时任务/:该字符可以指定一个初始值和增加的步长,如"0/5 * * * * *",即每隔5秒执行一次定时任务*:表示所有取值,如"* * * * * *"代表每一秒都会执行定时任务?:符号仅用于日和周中,表示匹配任意值,如也可使用"* * * ? * ?"来匹配每秒执行任务L:仅用于日和周,表示最后,如日使用L代表本月最后一天、周使用2L代表本月最后一个星期二会执行W:表示有效工作日(周一到周五),仅用于日,如8W当本月8号是周六时,会在最近的工作日周五执行#:仅用于周,代表第几个星期几,如2#4代表本月第2个星期四会执行任务
最后
以上就是在SpringBoot项目中使用@Scheduled注解实现定时任务的方法,以及注解中cron表达式的使用方式。而@Scheduled注解的方式仅是SpringBoot项目中实现定时任务的一种,还有其他方法我们后续再进行学习。