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