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

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

Quratz是什么:

Quartz 是一个完全由 Java 编写的开源作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制。
Quartz 可以与 J2EE 与 J2SE 应用程序相结合也可以单独使用。
Quartz 允许程序开发人员根据时间的间隔来调度作业。
Quartz 实现了作业和触发器的多对多的关系,还能把多个作业与不同的触发器关联。

创建springboot工程集成Quratz:

在IDEA中基于springboot 2.7.*创建工程,集成Quratz,勾选I/O下Quratz Scheduler即可;
在这里插入图片描述
创建完成后的pom.xml中Quratz的依赖是

 <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
@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,才能确定需要修改的触发器;

 @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;在下一次循环中生效;
相关文章
|
24天前
|
Java 调度 Spring
SpringBoot实现多线程定时任务动态定时任务配置文件配置定时任务
SpringBoot实现多线程定时任务动态定时任务配置文件配置定时任务
44 0
|
1月前
|
druid Java 数据库
Spring Boot的定时任务与异步任务
Spring Boot的定时任务与异步任务
|
4月前
|
Java Linux Maven
Linux快速启动SpringBoot工程
Linux快速启动SpringBoot工程
45 0
|
4月前
|
Java 微服务
【SpringBoot】SpringBoot工程 自定义配置文件
【SpringBoot】SpringBoot工程 自定义配置文件
33 0
|
6天前
|
Java Spring 容器
SpringBoot 使用Quartz执行定时任务对象时无法注入Bean问题
SpringBoot 使用Quartz执行定时任务对象时无法注入Bean问题
10 1
|
17天前
|
SQL Java 调度
SpringBoot集成quartz定时任务trigger_state状态ERROR解决办法
SpringBoot集成quartz定时任务trigger_state状态ERROR解决办法
|
1月前
|
存储 NoSQL Java
【十】springboot整合quartz实现定时任务优化
【十】springboot整合quartz实现定时任务优化
29 0
|
3月前
|
SQL 分布式计算 Java
SpringBoot集成quartz调度linkis任务
SpringBoot集成quartz调度linkis任务
|
3月前
|
算法 Java
制作SpringBoot工程模板
制作SpringBoot工程模板
32 0
|
3月前
|
Java 程序员 数据库
SpringBoot实现固定、动态定时任务 | 三种实现方式
SpringBoot实现固定、动态定时任务 | 三种实现方式
93 0