前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >在springboot工程中修改使用quartz创建的定时任务

在springboot工程中修改使用quartz创建的定时任务

原创
作者头像
JQ实验室
发布2022-12-08 20:22:06
1.6K0
发布2022-12-08 20:22:06
举报
文章被收录于专栏:实用技术实用技术
Quratz是什么:

Quartz 是一个完全由 Java 编写的开源作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制。

Quartz 可以与 J2EE 与 J2SE 应用程序相结合也可以单独使用。

Quartz 允许程序开发人员根据时间的间隔来调度作业。

Quartz 实现了作业和触发器的多对多的关系,还能把多个作业与不同的触发器关联。

创建springboot工程集成Quratz:

在IDEA中基于springboot 2.7.*创建工程,集成Quratz,勾选I/O下Quratz Scheduler即可;

在这里插入图片描述
在这里插入图片描述

创建完成后的pom.xml中Quratz的依赖是

代码语言:txt
复制
 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-quartz</artifactId>
        </dependency>
         <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

因为需要编写接口服务,所以引入了spring-boot-starter-web依赖;

获取所有Job信息;
  • 编写restful接口;创建接口添加注解RestController和RequestMapping
代码语言:txt
复制
@RestController
@RequestMapping("/api/cron")
public class CronRS {

    @Autowired
    Scheduler scheduler;

   
    @GetMapping("/list")
    public List<Map<String,Object>> listCron() throws Throwable{

        GroupMatcher<JobKey> matcher = GroupMatcher.anyJobGroup();
        Set<JobKey> jobKeys = scheduler.getJobKeys(matcher);
        List<Map<String,Object>> list = new ArrayList<>();
        for (JobKey jobkey: jobKeys) {
            List<? extends Trigger> triggers =scheduler.getTriggersOfJob(jobkey);
            for (Trigger trigger:triggers) {
                Map<String,Object> map = new HashMap<>();
                map.put("jobName",jobkey.getName());
                map.put("jobGroup",jobkey.getGroup());
                TriggerKey triggerKey = trigger.getKey();
                map.put("triggerKey",triggerKey.getName());
                Trigger.TriggerState state = scheduler.getTriggerState(triggerKey);
                map.put("state",state.name());
                if (trigger instanceof CronTrigger) {
                    CronTrigger cronTrigger = (CronTrigger) trigger;
                    String cronExpression = cronTrigger.getCronExpression();
                    map.put("cron",cronExpression);
                }
                list.add(map);
            }
        }

        return list;
    }
修改指定的Job定时任务触发信息;

需要传入指定的TriggerKey,才能确定需要修改的触发器;

代码语言:txt
复制
 @GetMapping("/update")
    public String updateCron() throws Throwable{

        TriggerKey triggerKey = new TriggerKey("pushJobTrigger");
        CronScheduleBuilder scheduleBuilder = CronScheduleBuilder
                .cronSchedule("0/10 * * * * ?");
        Trigger trigger = TriggerBuilder.newTrigger()
                .usingJobData("type","studio-restart")
                .withIdentity(triggerKey)
                .withSchedule(scheduleBuilder)
                .build();

        scheduler.rescheduleJob(triggerKey,trigger);

        return "ok";
    }
实现逻辑:

在以上代码中,接口服务中的Scheduler是可以直接依赖注入的;不需要额外指定Bean;但在之前版本的Quratz中是需要的;

  • 获取所有job的逻辑是:使用GroupMatcher匹配获取所有的jobKey;主要使用scheduler.getJobKeys()方法获取

使用jonbkey获取对应的触发器trigger;

获取所有触发器的相关信息;

  • 修改逻辑根据TriggerKey重新设置CronScheduleBuilder;在下一次循环中生效;

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Quratz是什么:
    • 创建springboot工程集成Quratz:
    • 获取所有Job信息;
    • 修改指定的Job定时任务触发信息;
      • 实现逻辑:
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档