• Spring和quartz整合的入门使用教程


    Quartz的maven依赖

            <!-- quartz 的jar -->
            <dependency>
                <groupId>org.quartz-scheduler</groupId>
                <artifactId>quartz</artifactId>
                <version>2.2.1</version>
            </dependency>
            <dependency>
                <groupId>org.quartz-scheduler</groupId>
                <artifactId>quartz-jobs</artifactId>
                <version>2.2.1</version>
            </dependency>

    方法一

    基于特定基类 编写任务类,该类需要继承自QuartzJobBean

    package com.sys.task;
    
    import org.quartz.JobExecutionContext;
    import org.quartz.JobExecutionException;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.scheduling.quartz.QuartzJobBean;
    
    /**
     * @Author:jimisun
     * @Description:
     * @Date:Created in 9:36 2018/8/1
     * @Modified By:
     */
    public class QuartzTestJob extends QuartzJobBean {
    
        public QuartzTestJob() {
            super();
        }
    
        private static final Logger logger = LoggerFactory.getLogger(QuartzTestJob.class);
        private Integer timeout;
    
        //调度工厂实例化后,经过timeout时间开始执行调度
        public void setTimeout(Integer timeout) {
            this.timeout = timeout;
        }
    
        @Override
        protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
            logger.info("定时任务1进行中.......");
        }
        
    }

    Spring中配置Quartz

      <!--开源作业调度框架
        org.springframework.scheduling.quartz.JobDetailBean有两个属性.
    
        jobClass属性即我们在java代码中定义的任务类.
    
        jobDataAsMap属性即该任务类中需要注入的属性值.-->
        <bean name="quartzTestJob1" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
            <property name="jobClass" value="com.sys.task.QuartzTestJob"/>
            <property name="jobDataAsMap">
                <map>
                    <entry key="timeout" value="0"/>
                </map>
            </property>
        </bean>
        <!--Cron表达式触发器
        Quartz的作业触发器有两种(两种任选其一就行)
    
        org.springframework.scheduling.quartz.SimpleTriggerFactoryBean:只支持按照一定频度调用任务,如每隔30分钟运行一次.
    
        org.springframework.scheduling.quartz.CronTriggerFactoryBean:支持到指定时间运行一次,如每天12:00运行一次等-->
        <bean id="cronTrigger1" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
            <property name="jobDetail" ref="quartzTestJob1"/>
            <property name="cronExpression" value="0/5 * * * * ?"/>
        </bean>
            <!--按照一定频率的触发器-->
     <!--   <bean id="cronTrigger1" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
            <property name="jobDetail" ref="quartzTestJob1"/>
            <property name="startDelay" value="0"/>
            <property name="repeatInterval" value="2000"/>
        </bean>-->
        <!--配置调度工厂-->
        <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
            <property name="triggers">
                <list>
                    <!--<ref bean="simpleTrigger"/>-->
                    <ref bean="cronTrigger1"/>
                </list>
            </property>
        </bean>

    执行结果

    DEBUG [org.springframework.scheduling.quartz.SchedulerFactoryBean#0_Worker-3] - Calling execute on job DEFAULT.quartzTestJob1
    DEBUG [org.springframework.scheduling.quartz.SchedulerFactoryBean#0_QuartzSchedulerThread] - batch acquisition of 1 triggers
     INFO [org.springframework.scheduling.quartz.SchedulerFactoryBean#0_Worker-3] - 定时任务1进行中.......

    方法二

    不基于特定的基类 编写普通的方法类

    package com.sys.task;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    /**
     * @Author:jimisun
     * @Description:
     * @Date:Created in 9:36 2018/8/1
     * @Modified By:
     */
    public class QuartzTestJob3 {
    
        private static final Logger logger = LoggerFactory.getLogger(QuartzTestJob3.class);
    
        public void executeJob() {
            logger.info("定时任务3进行中.......");
        }
    }

    在spring配置文件中配置作业类MethodInvokingJobDetailFactoryBean、作业调度的触发方式(触发器)、调度工厂

      <!--MethodInvokingJobDetailFactoryBean,有两个关键属性:targetObject指定任务类.targetMethod指定运行的方法.-->
    <bean name="quartzTestJob3" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject"> <bean class="com.sys.task.QuartzTestJob3"/> </property> <property name="targetMethod" value="executeJob"/> <!--作业不并发调度--> <property name="concurrent" value="false"/> </bean>
    <!--Cron表达式触发器--> <bean id="cronTrigger1" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"> <property name="jobDetail" ref="quartzTestJob3"/> <property name="cronExpression" value="0/5 * * * * ?"/> </bean>
    <!--配置调度工厂--> <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <!--<ref bean="simpleTrigger"/>--> <ref bean="cronTrigger1"/> </list> </property> </bean>

    执行结果

    DEBUG [org.springframework.scheduling.quartz.SchedulerFactoryBean#0_Worker-6] - Calling execute on job DEFAULT.quartzTestJob3
     INFO [org.springframework.scheduling.quartz.SchedulerFactoryBean#0_Worker-6] - 定时任务3进行中.......
    DEBUG [org.springframework.scheduling.quartz.SchedulerFactoryBean#0_QuartzSchedulerThread] - batch acquisition of 1 triggers

    文章中测试学习来源自博文https://www.cnblogs.com/hafiz/p/6159280.html 

  • 相关阅读:
    发送邮件封装的方法
    异步编程
    Xaml中string(字符串)常量的定义以及空格的处理
    python中lxml的应用
    Python打包成exe
    利用TaskScheduler处理Queue、Stack等类型的操作队列(生产者消费者场景)
    TreeView的性能问题
    WPF中ItemsControl绑定到Google ProtocolBuffer的结构体时的性能问题
    WPF中ToolTip的自定义
    WPF中ItemsControl绑定到Google ProtocolBuffer的结构体时的性能问题
  • 原文地址:https://www.cnblogs.com/jimisun/p/9400007.html
Copyright © 2020-2023  润新知