直接集成在Spring框架内
无须额外JAR包
配置亦尤其简单
只需要在Spring配置文件中加入<task:annotation-driven/>即可
xml命令空间和schemaLocation别忘了加上如下代码:
xmlns:task="http://www.springframework.org/schema/task" http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd
之后再在相应的bean里需要定时执行的方法前加入注解@Scheduled(cron="...")即可定时执行任务
本次要讨论的是如何动态配置CRON,方法如下:
1.bean要上@EnableScheduling注解
2.bean要实现SchedulingConfigurer接口
3.看示例代码吧
import java.util.Date; import org.springframework.scheduling.Trigger; import org.springframework.scheduling.TriggerContext; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.SchedulingConfigurer; import org.springframework.scheduling.config.ScheduledTaskRegistrar; import org.springframework.scheduling.support.CronTrigger; import org.springframework.stereotype.Component; @Component @EnableScheduling public class TaskJob implements SchedulingConfigurer{ private static String cron; //修改之后的cron public static void setCron(String cron) { TaskJob.cron = cron; } public TaskJob() { //默认的cron cron = "0/5 * * * * ?"; } @Override public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { taskRegistrar.addTriggerTask(new Runnable() { @Override public void run() { //doSomething(); } }, new Trigger() { @Override public Date nextExecutionTime(TriggerContext triggerContext) { CronTrigger trigger=new CronTrigger(cron); return trigger.nextExecutionTime(triggerContext); } }); } }
可以通过调用TaskJob.setCron()方法来动态配置CRON表达式
若想停止定时任务执行,只需将CRON表达式设置为一个已过去的日期
如“* * * * * 2015”
记之以供日后查阅