Spring Boot实现动态更新任务的方法

网友投稿 298 2023-05-20


Spring Boot实现动态更新任务的方法

前言

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

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

实现方法

在 pom.xml 中添加 quartz-scheduler

org.quartz-scheduler

<artifactId>quartz

2.2.3

在 application.yml 中增加 cron ,默认一秒钟执行一次

cron:

pattern: 0/1 * * * * ?

创建 DynamicScheduledTask.java

public class DynamicScheduledTask implements SchedulingConfigurer {

@Value("${cron.pattern}")

public String pattern;

public void setCron(String cron) {

this.pattern = cron;

}

@Override

public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {

taskRegistrar.addTriggerTask(new Runnable() {

@Override

public void run() {

doBiz();

}

}, new Trigger() {

@Override

public Date nextExecuthttp://ionTime(TriggerContext triggerContext) {

// 定时任务触发,可修改定时任务的执行周期

CronTrigger trigger = new CronTrigger(pattern);

Date nextExecDate = trigger.nextExecutionTime(triggerContext);

return nextExecDate;

}

});

}

public void doBiz() {

// do your biz

System.out.println("do biz...");

}

}

在 Application.java 中增加 @EnableScheduling 注解

这样,运行 Application.java 就会每隔一秒执行 Job 了。

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

UserDynamicJob.java

@Component

public class UserDynamicJob extends DynamicScheduledTask {

@Autowired

IUserService userService;

@Override

public void doBiz() {

Map params = new HashMap<>();

try {

User user = userService.selectOne(params);

System.out.println(user);

} catch (DataNotFoundException e) {

e.printStackTrace();

}

}

}

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

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

在我们的 Controller 中,增加一个方法

@PostMapping(value = "/cron")

public String changeDynamicCron(String cron) {

userDynamicJob.setCron(cron);

return "Success";

}

这样,通过调用 localhost:8080/corn?corn=0/10 * * * * ?

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

总结

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


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:spring的几个重要类和接口(详解)
下一篇:Spring中属性注入的几种方式以及复杂属性的注入详解
相关文章

 发表评论

暂时没有评论,来抢沙发吧~