@Configuration
public class TimedTask {
public final static long SECOND = 1 * 1000;
SimpleDateFormat DATEFORMRT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
/**
* Corn表达式 @Scheduled(cron = Corn表达式)每1秒执行一次
*/
@Scheduled(cron = "0/20 * * * * ?")
public void scheduler() {
System.out.println("TimedTask.scheduler()");
}
/**
* 固定间隔时间 @Scheduled(fixedRate = 时间间隔 , 单位毫秒)
*/
@Scheduled(fixedRate = SECOND * 4)
public void fixedRateJob() {
System.out.println("[FixedRateJob Execute]" + DATEFORMRT.format(new Date()));
}
/**
* 固定等待时间 @Scheduled(fixedDelay = 时间间隔, 单位毫秒 )
* @throws InterruptedException
*/
@Scheduled(fixedDelay = SECOND * 2)
public void fixedDelayJob() throws InterruptedException {
TimeUnit.SECONDS.sleep(2);
System.out.println("[FixedDelayJob Execute]" + DATEFORMRT.format(new Date()));
}
}
动态修改定时任务cron参数
@Component
public class DynamicScheduledTask implements SchedulingConfigurer {
private static final SimpleDateFormat DATEFORMAT = new SimpleDateFormat("HH:mm:ss");
private static String DEFAULT_CRON = "0/5 * * * * ?";
private static String TEMP_CRON = DEFAULT_CRON;
private String cron = DEFAULT_CRON;
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
taskRegistrar.addTriggerTask(new Runnable() {
public void run() {
if(!cron.equals(TEMP_CRON)){
//避免程序再次执行之前设置的时间点定时任务
//假如:原来为5秒执行一次。修改为每10秒一次后,程序还会自动执行一次5秒一次的任务才能切到10秒一次
return;
}
System.out.println("当前cron --->" + cron);
// 定时任务的业务逻辑
System.out.println("当前时间:" + DATEFORMAT.format(new Date()));
}
}, new Trigger() {
@Override
public Date nextExecutionTime(TriggerContext triggerContext) {
// 定时任务触发,可修改定时任务的执行周期
CronTrigger trigger = new CronTrigger(cron);
Date nextExecDate = trigger.nextExecutionTime(triggerContext);
TEMP_CRON = cron;
return nextExecDate;
}
});
}
/**
* 修改cron表达式
* @param cron
*/
public void setCron(String cron) {
this.cron = cron;
}
}
参考:http://www.jb51.net/article/108326.htm,http://blog.youkuaiyun.com/je_ge/article/details/53434321