在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;在下一次循环中生效;
相关文章
|
4月前
|
Java 关系型数据库 MySQL
SpringBoot 集成 Quartz + MySQL
SpringBoot 集成 Quartz + MySQL
116 1
|
4月前
|
Java 测试技术 数据库
SpringBoot单元测试快速写法问题之不想在PandoraBoot工程中Mock Dao层如何解决
SpringBoot单元测试快速写法问题之不想在PandoraBoot工程中Mock Dao层如何解决
|
5月前
|
SQL Java 调度
实时计算 Flink版产品使用问题之使用Spring Boot启动Flink处理任务时,使用Spring Boot的@Scheduled注解进行定时任务调度,出现内存占用过高,该怎么办
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
5月前
|
Java 数据库连接 Maven
文本,使用SpringBoot工程创建一个Mybatis-plus项目,Mybatis-plus在编写数据层接口,用extends BaseMapper<User>继承实体类
文本,使用SpringBoot工程创建一个Mybatis-plus项目,Mybatis-plus在编写数据层接口,用extends BaseMapper<User>继承实体类
|
7月前
|
前端开发 Java Linux
性能工具之 Jmeter 通过 SpringBoot 工程启动
【5月更文挑战第22天】性能工具之 Jmeter 通过 SpringBoot 工程启动
106 8
性能工具之 Jmeter 通过 SpringBoot 工程启动
|
6月前
|
Java Maven Spring
创建Springboot工程的过程详细步骤
【6月更文挑战第17天】 创建Springboot工程涉及以下步骤: 1. 安装JDK和Maven并配置环境变量。 2. 在IDEA中新建项目,选择`Create from archetype`,选取`spring-boot-starter-parent`。 3. 输入项目名、包名和模块名,完成设置。 4. 生成的项目包含Springboot主类`Application`。 5. 添加所需功能,如控制器、服务和数据访问对象,使用Spring注解。 6. 运行`Application`启动项目。要深入学习,参考官方文档或在线教程。 ```
53 3
|
6月前
|
消息中间件 设计模式 Java
SpringBoot+Schedule 定时任务的配置开关
SpringBoot+Schedule 定时任务的配置开关
173 0
SpringBoot+Schedule 定时任务的配置开关
|
6月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp小程序的贵工程寝室快修附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp小程序的贵工程寝室快修附带文章源码部署视频讲解等
38 1
|
5月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的贵工程寝室快修小程序附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的贵工程寝室快修小程序附带文章源码部署视频讲解等
32 0
|
5月前
|
JavaScript Java 测试技术
基于SpringBoot+Vue的贵工程学生宿舍管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue的贵工程学生宿舍管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
34 0