1.直接设置参数在方法名上面
MyTask.java
package com.guilf.task;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import java.util.Date;
/**
* 自定义任务类.
*
*/
@Configuration
@EnableScheduling
public class MyTask {
/**
* @Scheduled 详细参数说明:
*
* 1.corn 指定:秒,分钟,小时,日期,月份,星期,年(可选)
* 2.fixedDelay 从上一个任务完成到下一个任务开始的间隔,单位是毫秒
* 3.fixedDelayString 同上,只是字符串类型.
* 4.fixedRate 从上一个任务开始到下一个任务开始的间隔,单位是毫秒
* 5.fixedRateString 同上,只是字符串类型.
* 6.initialDelay 任务第一次执行前需要延迟的毫秒数
* 7.initialDelayString 同上,只是字符串类型.
* 8.zone 指定时区
*
*/
/**
* 这个方法每10秒打印一次.
* 使用cron表达式 指定:秒,分钟,小时,日期,月份,星期,年(可选).
*/
@Scheduled(cron = "0/10 * * * * *")
public void test() {
System.out.println("test1......" + new Date().getTime());
}
/**
* 每隔6秒执行.
*/
// @Scheduled(fixedDelay = 6000)
// public void test2() {
// System.out.println("test2..." + new Date().getTime());
// }
// @Scheduled(fixedDelayString = "5000")
// public void test3(){
// System.out.println("test3..."+new Date().getTime());
// }
}
2.把参数设在文件里面
2.1 设置方法
/**
* 使用外部的cron 表达式.
*/
@Scheduled(cron = "${my.cron}")
public void test4() {
System.out.println("test4..." + new Date().getTime());
}
2.2 设置参数
application.yml
##CRON表达式 含义
# "0 0 12 * * ?" 每天中午十二点触发
# "0 15 10 ? * *" 每天早上10:15触发
# "0 15 10 * * ?" 每天早上10:15触发
# "0 15 10 * * ? *" 每天早上10:15触发
# "0 15 10 * * ? 2005" 2005年的每天早上10:15触发
# “0 * 14 * * ?" 每天从下午2点开始到2点59分每分钟一次触发
# "0 0/5 14 * * ?" 每天从下午2点开始到2:55分结束每5分钟一次触发
# "0 0/5 14,18 * * ?" 每天的下午2点至2:55和6点至6点55分两个时间段内每5分钟一次触发
## "0 0-5 14 * * ?" 每天14:00至14:05每分钟一次触发
# "0 10,44 14 ? 3 WED" 三月的每周三的14:10和14:44触发
# "0 15 10 ? * MON-FRI" 每个周一、周二、周三、周四、周五的10:15触发
my:
cron: '0/5 * * * * ?'
3.DynamicTask.java
package com.guilf.task;
import org.springframework.context.annotation.Configuration;
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;
import java.util.Date;
/**
* 动态修改定时任务.
* Created by hong on 2017/6/30.
*/
@Component
@EnableScheduling
public class DynamicTask implements SchedulingConfigurer {
/**
* ① 在定时任务类上增加@EnabledScheduling注解,并实现SchedulingConfigurer接口。
* ② 设置一个静态的cron,用于存放任务执行周期参数。
* ③ 开启一个线程,用于模拟实际业务中外部原因修改了任务执行周期。
* ④ 设置任务触发器,触发任务执行。
*/
/**
* 默认cron参数.
*/
private static final String DEFAULT_CRON = "0/5 * * * * ?";
/**
* 动态修改的cron参数.
*/
private String cron = DEFAULT_CRON;
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
taskRegistrar.addTriggerTask(
new Runnable() {
//设置定时任务执行点.
@Override
public void run() {
System.out.println("定时执行的任务." + new Date().getTime());
}
},
// 设置定时任务.
new Trigger() {
@Override
public Date nextExecutionTime(TriggerContext triggerContext) {
// 定时任务触发,可修改定时任务的执行周期
CronTrigger trigger = new CronTrigger(cron);
Date nextExecDate = trigger.nextExecutionTime(triggerContext);
return nextExecDate;
}
});
}
public void setCron(String cron) {
this.cron = cron;
}
}
DynamicTaskController.java
package com.guilf.mvc;
import com.guilf.task.DynamicTask;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
/**
*
*/
@RestController
public class DynamicTaskController {
@Autowired
private DynamicTask dynamicTask;
private static final String DEFAULT_CRON = "0/10 * * * * ?";
/**
* 动态修改定时任务.
* @return
*/
@GetMapping("/dynamicTask")
public String dynamicTask(){
dynamicTask.setCron(DEFAULT_CRON);
return DEFAULT_CRON;
}
}