介绍
这期内容当中小编将会给大家带来有关Springboot实现定时任务安排重复执行操,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
@ component 公开课TestJob { 0/2 @Scheduled (cron=? * * * *“) 公共空白测试(){ System.out.println(“测试开始“); System.out.println(“测试结束“); } }
上述任务在启动之后一直执行。
然后我在任务后面加入线程睡眠1分钟。
@ component 公开课TestJob { 0/2 @Scheduled (cron=? * * * *“) 公共空白测试(){ System.out.println(“测试开始“); System.out.println(“测试结束“); 尝试{ thread . sleep (60000); }捕捉(InterruptedException e) { e.printStackTrace (); } System.out.println(“睡眠结束“); } }
上述任务执行一次就没有再执行了。
所以我继续深入查看源码,发现问题在于CronSequenceGenerator。类的第二方法。
@ configuration (“myScheduled") @EnableScheduling 公开课ScheduledDemo {//每10秒执行一次 @Scheduled (cron=?/10 * * * *和# 63;“) 公共空间timmer () { System.out.println(“执行任务“); } }
2,动态定时器
//通过setCron方法修改任务周期 @ component (“myScheduled") 公共类ScheduledDemo实现SchedulingConfigurer {//默认的任务周期为10秒 私人字符串cron=?/10 * * * *和# 63;“; @Override 公共空间configureTasks (ScheduledTaskRegistrar taskRegistrar) {//TODO自动生成方法存根 taskRegistrar。addTriggerTask(新Runnable () { @Override 公共空间run () {//TODO自动生成方法存根 System.out.println(“执行任务“); } },新的触发(){ @Override 公开日期nextExecutionTime (TriggerContext TriggerContext) { 返回新CronTrigger (cron) .nextExecutionTime (triggerContext); } }); } 公共空间setCron(字符串cron) { 这一点。cron=cron; } }
3,动态定时器:多线程定时任务执行,可以设置执行线程池数(默认一个线程)
@ component (“myScheduled") 公开课ScheduledImpl { ,私人ScheduledFuture<和# 63的在未来; @ autowired 私人ThreadPoolTaskScheduler ThreadPoolTaskScheduler; @ bean 公共ThreadPoolTaskScheduler ThreadPoolTaskScheduler () { 返回新ThreadPoolTaskScheduler (); } @Override 公共空间setCron(最终字符串cron) { stopCron (); 未来=threadPoolTaskScheduler。日程安排(新Runnable () { @Override 公共空间run () {//TODO自动生成方法存根 System.out.println(“执行任务“); } },新的触发(){ @Override 公开日期nextExecutionTime (TriggerContext TriggerContext) { 如果(cron==null | |““.equals (cron)) { 返回null; } CronTrigger CronTrigger=new CronTrigger (cron); 返回cronTrigger.nextExecutionTime (triggerContext); } }); } @Override 公共空间stopCron () { 如果(未来!=null) { future.cancel(真正的); } } }Springboot实现定时任务安排重复执行操