1、简单使用
@Scheduled的使用方式十分简单,首先在配置文件中启动注解驱动。<task:annotation-driven/>。然后编写任务类,并在任务类中编写定时任务的方法,最后将任务类交于spring管理:
@Component
public class TaskA {
@Scheduled(cron = "0/5 * * * * *")
public void say() {
System.out.println("say run");
}
}
2、fixedDelay和fixedRate
@Scheduled(fixedDelay = 5000)
public void fixedDelayTest() throws InterruptedException {
System.out.println("fixedDelayTest run");
}
fixedDelay是设定上一个任务结束后多久执行下一个任务,也就是fixedDelay只关心上一任务的结束时间和下一任务的开始时间。
@Scheduled(fixedRate = 5000)
public void fixedRateTest() throws InterruptedException {
System.out.println("fixedRateTest run");
}
fixedRate设置的上一个任务的开始时间到下一个任务开始时间的间隔。
3、spring的定时任务默认是单线程的,他在某些场景下会造成堵塞,那么如果我们想让每一个任务都起一条线程去执行呢?
3.1、使用Spring的@Async注解十分容易的实现多线程的任务执行。
@Scheduled(cron = "0/5 * * * * *")
@Async
public void say() {
System.out.println("say run");
}
3.2、配置线程池大小
<task:annotation-driven scheduler="taskScheduler" />
<!-- 配置任务线程池和线程池大小 -->
<task:scheduler id="taskScheduler" pool-size="6" />
@Scheduled(cron = "0/5 * * * * *")
@Async("taskScheduler")
public void say() {
System.out.println("say run");
}