Spring-Task 动态配置CRON

Spring-Task是Spring框架自带的轻量级定时任务框架
直接集成在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”
记之以供日后查阅

猜你喜欢

转载自leozam.iteye.com/blog/2379852