SpringBoot几种定时任务的实现方式
2018-07-03 · 国内最优秀java资源共享平台
第一种比较简单
第二种
@SpringBootApplication
/*
* 开启对定时任务的支持
* 在相应的方法上添加@Scheduled声明需要执行的定时任务。
*/
@EnableScheduling
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
@SpringBootApplication
/*
* 开启对定时任务的支持
* 在相应的方法上添加@Scheduled声明需要执行的定时任务。
*/
@EnableScheduling
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
/*把普通pojo实例化到spring容器中,相当于配置文件中的
<bean id="" class=""/>
若想动态改变其值需要继承SchedulingConfigurer
*/
public class AutoSchedule implements SchedulingConfigurer{
private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
private static final String DEFAULT_CRON = "0/5 * * * * ?";
private String cron = DEFAULT_CRON;
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
// Runnable(线程接口类) 和CronTrigger(定时任务触发器)
taskRegistrar.addTriggerTask(() -> {
// 定时任务的业务逻辑
System.out.println("动态修改定时任务cron参数,当前时间:" + dateFormat.format(new Date()));
}, (triggerContext) -> {
// 定时任务触发,可修改定时任务的执行周期
CronTrigger trigger = new CronTrigger(cron);
Date nextExecDate = trigger.nextExecutionTime(triggerContext);
return nextExecDate;
});
}
public void setCron(String cron) {
System.out.println("当前cron="+this.cron+"->将被改变为:"+cron);
this.cron = cron;
}
}
第三种
@RestController
@Component
public class CrudSchelud {
//用threadPoolTaskScheduler 类实现对任务的定时调度功能,
//重写CronTrigger触发器,任务却被不断调用3
@Autowired
private ThreadPoolTaskScheduler threadPoolTaskScheduler;
private ScheduledFuture<?> future;
@Bean
public ThreadPoolTaskScheduler threadPoolTaskScheduler() {
return new ThreadPoolTaskScheduler();
}
@RequestMapping("/startCron")
public String startCron() {
future = threadPoolTaskScheduler.schedule(new MyRunnable(), new CronTrigger("0/5 * * * * *"));
System.out.println("DynamicTask.startCron()");
return "startCron";
}
@RequestMapping("/stopCron")
public String stopCron() {
if (future != null) {
future.cancel(true);
}
System.out.println("DynamicTask.stopCron()");
return "stopCron";
}
@RequestMapping("/changeCron10")
public String startCron10() {
stopCron();// 先停止,在开启.
future = threadPoolTaskScheduler.schedule(new MyRunnable(), new CronTrigger("*/10 * * * * *"));
System.out.println("DynamicTask.startCron10()");
return "changeCron10";
}
private class MyRunnable implements Runnable {
@Override
public void run() {
System.out.println("DynamicTask.MyRunnable.run()," + new Date());
}
}
}