zoukankan      html  css  js  c++  java
  • 【定时任务】Spring Boot 中如何使用 Quartz

    这篇文章将介绍如何在Spring Boot 中使用Quartz。

    一、首先在 pom.xml 中添加 Quartz 依赖。

         <!-- quartz依赖 -->
            <dependency>  
                <groupId>org.quartz-scheduler</groupId>  
                <artifactId>quartz</artifactId>  
                <version>2.2.1</version>  
            </dependency>  
            
            <!-- 该依赖必加,里面有spring对schedule的支持 --> 
            <dependency> 
                <groupId>org.springframework</groupId>  
                <artifactId>spring-context-support</artifactId>  
            </dependency>  

    二、编写任务类,里面编写希望得到定时执行的具体任务。注意在任务类上需要添加 @Component 注解,方便Spring 扫描到该组件并注解到Spring 容器中。

    /**
     * 定时任务
     * @author lWX515915
     *
     */
    @Component
    public class MyTask{
        
        public void task1() {
            System.out.println("this is task1 time: " + new Date());
        }
    
    }

    三、然后编写配置类 QuartzConfig ,该类中使用Java代码详细描述了如何配置Quartz。类前添加@Configuration注解 表示这是配置类

    @Configuration 表示这个类会声明一个或者多个 Bean 类 并且有可能会被Spring 容器处理来生成bean的定义和bean对应的服务请求。

    在configuration类中,我们需要对三个对象JobDetail、Trigger 和 Scheduler 进行配置。

    /**
     * Quartz配置类
     * @author lWX515915
     *
     */
    @Configuration
    public class QuartzConfig
    {
        ...
    }

    1、配置JobDetail

      @Bean表示该方法返回一个bean,并交付Spring容器管理 。

      参数是任务,setTargetObject 是设置具体的执行目标,setTargetMethod 是设置具体的执行方法。

      MethodInvokingJobDetailFactoryBean 是JobDetail 的 bean 工厂。

      /**
         * 配置JobDetail
         * @param scheduledTask  需要被执行的任务
         * @return
         */
        @Bean(name="jobDetail")
        public MethodInvokingJobDetailFactoryBean detailFactoryBean(MyTask task) {
            MethodInvokingJobDetailFactoryBean jobDetail = new MethodInvokingJobDetailFactoryBean();
            
            jobDetail.setConcurrent(false);//设置多任务是否采用并发模式
            
            jobDetail.setName("job1"); 
            jobDetail.setGroup("group1");
            
            jobDetail.setTargetObject(task); //设置具体执行目标 
            jobDetail.setTargetMethod("task1"); //设置具体执行方法
            
            return jobDetail;      
        }

    2、配置 Trigger

      其中参数表示JobDetail,这里就是我们之前注册到Spring 容器中的JobDetail bean。

      setJobDetail 设置具体的任务。

      setCronExpression 设置cron 表达式。

      返回值是CronTriggerFactoryBean,是一个CronTrigger对应的bean factory。

      /**
         * 配置trigger
         * @param jobDetail
         * @return
         */
        @Bean(name="jobTrigger")
        public CronTriggerFactoryBean cronJobTrigger(MethodInvokingJobDetailFactoryBean jobDetail) {
            CronTriggerFactoryBean jobTrigger = new CronTriggerFactoryBean();
            jobTrigger.setJobDetail(jobDetail.getObject());
            jobTrigger.setCronExpression("0/10 * * ? * *");
            jobTrigger.setName("jobTrigger");
            return jobTrigger;
        }

    3、配置Scheduler

      其中setOverwriteExistingJobs 设置是否更新已经存在的job

      setTriggers 设置trigger

      返回scheduler 对应的bean工厂

      /**
         * 配置调度器
         * @param trigger
         * @return
         */
        @Bean(name="jobSchedule")
        public SchedulerFactoryBean schedulerFactory(CronTriggerFactoryBean trigger) {
            SchedulerFactoryBean schedulerFactory = new SchedulerFactoryBean();
            
            schedulerFactory.setOverwriteExistingJobs(true);//设置更新已经存在的job
            schedulerFactory.setTriggers(trigger.getObject());
            
            return schedulerFactory;
        }

    经过上面三个步骤,Quartz 的配置类就已经完成了

    四、启动应用 查看结果,下面是运行的结果。可以看到实现了我们想要的结果。

     综上,Spring Boot 中使用 Quartz 的关键在与 Quartz 的配置。

  • 相关阅读:
    FZU 2150 Fire Game
    POJ 3414 Pots
    POJ 3087 Shuffle'm Up
    POJ 3126 Prime Path
    POJ 1426 Find The Multiple
    POJ 3278 Catch That Cow
    字符数组
    HDU 1238 Substing
    欧几里德和扩展欧几里德详解 以及例题CodeForces 7C
    Codeforces 591B Rebranding
  • 原文地址:https://www.cnblogs.com/cuglkb/p/7803083.html
Copyright © 2011-2022 走看看