001-spring结合quartz使用

一、添加pom

二、定义业务类

public class  TestJobTask{  
      /** 
       *业务逻辑处理 
       */  
        public void   service(){  
            /**业务逻辑*/  
                ..  
        }  
}  

二、配置spring的xml

    <!-- 线程执行器配置,用于任务注册 -->
    <bean id="executor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
        <property name="corePoolSize" value="10"/>
        <property name="maxPoolSize" value="100"/>
        <property name="queueCapacity" value="500"/>
    </bean>
    <!-- 业务对象 -->
    <bean id="testJobTask" class="com.mike.scheduling.TestJobTask"/>
    <!-- 调度业务 -->
    <bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <property name="targetObject" ref="testJobTask"/>
        <property name="targetMethod" value="service"/>
    </bean>
    <!-- 第一种触发时间,采用类似linux的cron,配置时间的表示发出丰富-->
    <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
        <property name="jobDetail" ref="jobDetail"/>
        <!--Cron表达式“10 */1 * * * ?”意为:从10秒开始,每1分钟执行一次 -->
        <property name="cronExpression" value="10 0/1 * * * ?"/>
    </bean>
    <!-- 第二种,采用比较简话的方式,申明延迟时间和间隔时间-->
    <bean id="taskTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
        <!--延迟10秒启动,然后每隔1分钟执行一次 -->
        <property name="jobDetail" ref="jobDetail"/>
        <property name="startDelay" value="10000"/>
        <property name="repeatInterval" value="60000"/>
    </bean>
    <!-- 设置调度 -->
    <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="triggers">
            <list>
                <ref bean="cronTrigger"/>
            </list>
        </property>
        <property name="taskExecutor" ref="executor"/>
    </bean>

启动容器即可,已经将spring和quartz结合完毕

根据上面spring的配置,我们就比较清楚quartz的内部情况,下面我们主要详解配置涉及到的每个点
    1.我们先从最后一个步骤看起, SchedulerFactoryBean ,scheduler的工厂实现,里面可以生产出对应的多个jobDetail和trigger,每个jobDetail对应trigger代表一个任务
          Quartz的SchedulerFactory是标准的工厂类,不太适合在Spring环境下使用。此外,为了保证Scheduler能够感知 Spring容器的生命周期,完成自动启动和关闭的操作,必须让Scheduler和Spring容器的生命周期相关联。以便在Spring容器启动后, Scheduler自动开始工作,而在Spring容器关闭前,自动关闭Scheduler。为此,Spring提供 SchedulerFactoryBean,这个FactoryBean大致拥有以下的功能: 

     1)以更具Bean风格的方式为Scheduler提供配置信息; 

     2)让Scheduler和Spring容器的生命周期建立关联,相生相息; 

     3)通过属性配置部分或全部代替Quartz自身的配置文件。 

  2.jobDetail,表示一个可执行的业务调用
  
  3.trigger:调度的时间计划,什么时候,每隔多少时间可执行等时间计划

  4. ThreadPoolTaskExecutor,线程池,用来并行执行每个对应的job,提高效率,这也是上面提到不推荐使用jdk自身timer的一个很重要的原因

原文地址:https://www.cnblogs.com/bjlhx/p/6992762.html