SpringBoot 定时器/定时任务:在一个指定的周期时间内,执行某一项任务。

说多都是累,直接上代码:
实现方式有三种(可能还有更多的实现,这三种只是楼主目前所知道的):
    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

相关推荐

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:编程工作室 设计师:CSDN官方博客 返回首页

打赏作者

武侠阿蒙

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值