SpringBoot @Scheduled注解来实现定时任务
@Schedule 注解
- fixedRate是按照一定的速率执行,项目启动后就开始执行 每隔x毫秒(x秒)执行一次
- fixedDelay控制方法执行的间隔时间,是以上一次方法执行完开始算起,固定频率执行
- initialDelay 意思就是在项目启动后,延迟10秒后再执行一次定时器定时任务
- cron表达式可以定制化执行任务 corn可以自定义配置表达式时间
@Schedule 定时任务例子
package com.ratel.boot.platform.schedule.dto;import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;import java.time.LocalDateTime;
import java.util.concurrent.TimeUnit;/*** @author ratelie*/
@Component
public class SpringScheduleTest {//11111//** 项目启动后就开始执行 每隔1000毫秒(1秒)执行一次 */@Scheduled(fixedRate = 1000)public void schedule1(){System.out.println("schedule1:"+ LocalDateTime.now());}/** 项目启动后就开始执行 每隔2000毫秒(2秒)执行一次 */@Scheduled(fixedRate = 2, timeUnit = TimeUnit.SECONDS)public void schedule1_1(){System.out.println("schedule1_1:"+ LocalDateTime.now());}/** 项目启动后 等个5秒开始执行 每隔3000毫秒(3秒)执行一次 */@Scheduled(initialDelay = 5,fixedRate = 3, timeUnit = TimeUnit.SECONDS)public void schedule1_2(){System.out.println("schedule1_2:"+ LocalDateTime.now());}//22222//** 每1000毫秒(1秒)执行fixedDelay一次 */@Scheduled(fixedDelay = 1000)public void schedule2(){System.out.println("schedule2:"+ LocalDateTime.now());}/** 每3秒执行fixedDelay一次 */@Scheduled(fixedDelay = 3 , timeUnit = TimeUnit.SECONDS)public void schedule2_1(){System.out.println("schedule2_1:"+ LocalDateTime.now());}//33333//** 每分钟执行1次 */@Scheduled(cron = "0 */1 * * * ?")public void schedule3(){System.out.println("schedule3:"+ LocalDateTime.now());}/** 每天凌晨1点执行一次 */@Scheduled(cron = "0 0 1 * * ?")public void schedule3_1(){System.out.println("schedule3_1:"+ LocalDateTime.now());}}
@Schedule注解参数
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//package org.springframework.scheduling.annotation;import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Repeatable;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.concurrent.TimeUnit;@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 "";TimeUnit timeUnit() default TimeUnit.MILLISECONDS;
}
corn 表达式示例
每隔5秒执行一次:*/5 * * * * ?每隔1分钟执行一次:0 */1 * * * ?每天23点执行一次:0 0 23 * * ?每天凌晨1点执行一次:0 0 1 * * ?每月1号凌晨1点执行一次:0 0 1 1 * ?每月最后一天23点执行一次:0 0 23 L * ?每周星期天凌晨1点实行一次:0 0 1 ? * L在26分、29分、33分执行一次:0 26,29,33 * * * ?每天的0点、13点、18点、21点都执行一次:0 0 0,13,18,21 * * ?