从Spring3.1开始,计划任务在Spring中的实现变得异常简单。首先通过在配置类注解@EnableScheduling来开启对计划任务的支持,然后在要执行计划任务的方法上注解@Scheduled,声明这是一个计划任务。
Spring通过@Scheduler支持多种类型的计划任务,包含cron,fixDelay,fixRate等。
示例:
计划任务执行类
package com.test.taskscheduler;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import java.text.SimpleDateFormat;
import java.util.Date;
@Service
public class ScheduleTaskService {
private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
@Scheduled(fixedRate = 5000) //通过@Scheduled声明该方法时计划任务,使用fixedRate属性固定时间执行
public void reportCurrentTime(){
System.out.println("每隔五秒执行一次"+dateFormat.format(new Date()));
}
@Scheduled(cron = "0 30 15 ? * *") //使用cron属性可按照指定时间执行,cron是linux/unix下的定时任务
public void fixTimeExecution(){
System.out.println("在指定时间"+dateFormat.format(new Date())+"执行!");
}
}
配置类
package com.test.taskscheduler;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
@Configuration
@ComponentScan("com.test.taskscheduler")
@EnableScheduling
public class TaskSchedulerConfig {
}
运行
package com.test.taskscheduler;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class TestMain {
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(TaskSchedulerConfig.class);
}
}
运行结果