弹簧引导实现动态更新任务的方法

  

  

SpringBoot实现动态工作,可以通过API动态变更cron。

  

原生的工作实现起来很简单,只要用注解<代码> @Scheduled (cron=xxxxxx) 来实现就可以了,但是要实现动态更改cron,就需要做点其他的了。

  

  

在pom。xml中添加quartz-scheduler

        & lt; dependency>   & lt; groupId> org.quartz-scheduler   & lt; artifactId> quartz   & lt; version> 2.2.3   & lt;/dependency>      

在应用程序。yml中增加cron,默认一秒钟执行一次

        cron:   模式:0/1 * * * * & # 63;      

创建DynamicScheduledTask.java         公共类DynamicScheduledTask实现SchedulingConfigurer {   @ value (" $ {cron.pattern} ")   公共字符串模式;   公共空间setCron(字符串cron) {   这一点。模式=cron;   }   @Override   公共空间configureTasks (ScheduledTaskRegistrar taskRegistrar) {   taskRegistrar。addTriggerTask(新Runnable () {   @Override   公共空间run () {   doBiz ();   }   },新的触发(){   @Override   公开日期nextExecutionTime (TriggerContext TriggerContext) {//定时任务触发,可修改定时任务的执行周期   CronTrigger触发=new CronTrigger(模式);   日期nextExecDate=trigger.nextExecutionTime (triggerContext);   返回nextExecDate;   }   });   }   公共空间doBiz () {//你的商业   system . out。println(“商业…”);   }   }      

在应用程序。java中增加@EnableScheduling注解

  

这样,运行应用程序。java就会每隔一秒执行工作了。
  

  

如果要实现特定的逻辑,可以继承DynamicScheduledTask。java,重写<代码> doBiz() 方法。

  

UserDynamicJob.java         @ component   公开课UserDynamicJob延伸DynamicScheduledTask {   @ autowired   IUserService userService;   @Override   公共空间doBiz () {   Object> Map<字符串;,params=new HashMap<的在();   尝试{   用户用户=userService.selectOne (params);   System.out.println(用户);   }捕捉(DataNotFoundException e) {   e.printStackTrace ();   }   }   }      

写到这里,其实还没有实现动态更改cron表达式。
  

  

接下来我们可以通过api来动态更改。
  

  

在我们的控制器中,增加一个方法

        @PostMapping (value=" https://www.yisu.com/cron ")   changeDynamicCron公共字符串(字符串cron) {   userDynamicJob.setCron (cron);   返回“成功”;   }      

这样,通过调用<代码> localhost: 8080/玉米# 63;玉米=0/10 * * * * & # 63;
  

  

就可以实现每10秒执行一次了。

  

  

以上就是这篇文章的全部内容了,希望本文的内容对大家学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。

弹簧引导实现动态更新任务的方法