说多都是累,直接上代码:
实现方式有三种(可能还有更多的实现,这三种只是楼主目前所知道的):
1、静态定时器,无法修改周期
实现方式有三种(可能还有更多的实现,这三种只是楼主目前所知道的):
1、静态定时器,无法修改周期
@Configuration("myScheduled")
@EnableScheduling
public class ScheduledDemo{
//每10秒执行一次
@Scheduled(cron="0/10 * * * * ?")
public void timmer(){
System.out.println("执行任务");
}
}
2、动态定时器
//通过setCron 方法修改 任务周期
@Component("myScheduled")
public class ScheduledDemo implements SchedulingConfigurer{
//默认的任务周期为 10秒
private String cron = "0/10 * * * * ?";
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
// TODO Auto-generated method stub
taskRegistrar.addTriggerTask(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("执行任务");
}
}, new Trigger() {
@Override
public Date nextExecutionTime(TriggerContext triggerContext) {
return new CronTrigger(cron).nextExecutionTime(triggerContext);
}
});
}
public void setCron(String cron) {
this.cron = cron;
}
}
3、动态定时器:多线程定时任务执行,可以设置执行线程池数(默认一个线程)
@Component("myScheduled")
public class ScheduledImpl{
private ScheduledFuture<?> future;
@Autowired
private ThreadPoolTaskScheduler threadPoolTaskScheduler;
@Bean
public ThreadPoolTaskScheduler threadPoolTaskScheduler() {
return new ThreadPoolTaskScheduler();
}
@Override
public void setCron(final String cron) {
stopCron();
future = threadPoolTaskScheduler.schedule(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("执行任务");
}
}, new Trigger() {
@Override
public Date nextExecutionTime(TriggerContext triggerContext) {
if(cron==null || "".equals(cron)) {
return null;
}
CronTrigger cronTrigger = new CronTrigger(cron);
return cronTrigger.nextExecutionTime(triggerContext);
}
});
}
@Override
public void stopCron() {
if(future!=null) {
future.cancel(true);
}
}
}
cron 的参数说明,详细说明直接网上搜吧!
大概说明:秒 分 时 日 月 星期 年(可省略)
/ 后面表示周期
- 表示范围
星期一般用 ? ,为了防止和 日 混淆,如果星期有值,则日用 ?
“0/10 * * * * ?”表示每10秒
“0 0/10 * * * ?”表示每10分
友情链接:https://www.cnblogs.com/linjiqin/archive/2013/07/08/3178452.html