Spring 定时任务的注解实现方式
本文介绍 Spring 定时任务的实现方式。
注解 @Scheduled
该注解的参数分别表示的意思是:
cron 表达式:可以定制化执行任务。执行的方式与 fixedDelay 相近,会按照上一次方法结束时间开始算起。
fixedDelay:控制方法执行的间隔时间,是以上一次方法执行完开始算起,如上一次方法执行阻塞住了,那么直到上一次执行完,并间隔给定的时间后,执行下一次。
fixedRate:是按照一定的速率执行,是从上一次方法执行开始的时间算起,如果上一次方法阻塞住了,下一次也是不会执行,但是在阻塞这段时间内累计应该执行的次数,当不再阻塞时,一下子把这些全部执行掉,而后再按照固定速率继续执行。
initialDelay 。如:
@Scheduled(initialDelay = 10000,fixedRate = 15000)
这个定时器就是在上一个的基础上加了一个 initialDelay = 10000 意思就是在容器启动后,延迟 10 秒后再执行定时器,以后每 15 秒再执行一次该定时器。
Spring 注解方式
启动:在 spring.xml 中进行驱动配置:
<!--启动定时任务的注解驱动-->
<task:annotation-driven/>
在方法上使用 @Scheduled 注解
@Component
public class Job2 {
@Scheduled(fixedRate = 2000)
public void run1(){
// TODO
}
}
@Scheduled(cron = "0 3 * * * ?")
Spring Boot 注解方式
- 在启动类上加 @EnableScheduling 即可开启定时任务。
- 做一个任务类,加一个 @Component 注解来被 Spring 管理。
- 在方法上加 @Scheduled 注解
示例:
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
@Component
@EnableScheduling
@Service("testService")
public class TestService {
@Scheduled(fixedDelay = 5 * 60 * 1000)
public void load() {
// TODO
}
}
Cron 表达式
Cron 表达式是一个字符串,字符串以 5 或 6 个空格隔开,分为 6 或 7 个域。
每一个域代表一个含义,Cron 有如下两种语法格式:
Seconds Minutes Hours DayofMonth Month DayofWeek Year
Seconds Minutes Hours DayofMonth Month DayofWeek
corn 从左到右 (用空格隔开):秒 分 小时 月份中的日期 月份 星期中的日期 年份
示例:
- */2 * * * * ? 表示每 2 秒执行一次!
- 0 0 2 1 * ? * 表示在每月的 1 日的凌晨 2 点调度任务
- 0 15 10 ? * MON-FRI 表示周一到周五每天上午 10:15 执行作业
- 0 15 10 ? 6L 2002-2006 表示 2002-2006 年的每个月的最后一个星期五上午 10:15 执行作业。
配置说明:
相关文章