通过配置的方式实现spring的quartz定时任务

 通过配置的方式实现spring的quartz定时任务。

方式一,jobDetail的bean利用MethodInvokingJobDetailFactoryBean 工厂包装 :

(1)定义一个bean,执行具体的业务操作。
<bean id="updatePersonService" class="com.corop.packname.UpdatePersonService"/>

(2)定义一个jobDetail,执行业务操作的作业。
<bean id="updatePersonJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<!-- 作业要执行的业务操作 bean -->
                <property name="targetObject">
                        <ref bean="updatePersonService" />
                </property>

<!-- 业务操作bean里面具体执行业务操作的方法-->
                <property name="targetMethod">
                        <value>updatePerson</value>
                </property>
                <!-- 作业不并发执行 -->
                <property name="concurrent">
                        <value>false</value>
                </property>
</bean>

(3)定义一个触发器,根据时间表达式定时触发执行作业
<bean id="updatePersonTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<!-- 要触发执行的作业 bean -->
                <property name="jobDetail">
                        <ref bean="updatePersonJob" />
                </property>

<!-- 触发作业的时间表达式 -->
                <property name="cronExpression">
                        <!--"0 59 23 * * ?" 每天晚上23点59触发-->
                        <value>0 57 00 * * ?</value>
                </property>
  </bean>

(4)定义一个任务调度器
<!--lazy-init=false 容器启动时启动调度器,默认值, singleton='true'这个bean是单独存在的-->
<bean id="startQuertz" lazy-init="false" singleton='true' autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
            <property name="triggers">
              <!--触发器列表-->
                <list>
                    <ref local="updatePersonTrigger"/>
                </list>
            </property>
             <!--自动启动调度器器-->
            <property name="autoStartup">  
                    <value>true</value>  
            </property>  

</bean>

方式二,jobDetail采用继承QuartzJobBean的方式:

(1)定义的业务操作bean继承QuartzJobBean,重载方法 executeInternal(JobExecutionContext jobexecutioncontext) ,执行具体的业务操作。
 class UpdatePersonService extends QuartzJobBean{
        private Person person;
        public void setPerson(Person person){
                this.person = person;
        }

        @Override
         public void executeInternal(JobExecutionContext ctx){   
                throws JobExecutionException
                //执行具体的业务操作
                String param1 = ctx.getJobDetail().getJobDataMap().getString("param1");
        }

}
(2)定义jobDetail的bean :
<bean id = 'updatePersonJob' class= 'org.springframework.scheduling.quartz.JobDetailBean'>
         <!--定义业务操作类-->
        <property name="jobClass" value = 'com.corop.packname.UpdatePersonService' />
        <!--定义执行业务操作需要的参数 -->
        <property name="jobDataAsMap">  
                <map>  
                      <entry key="timeout" value="0" /> 
                       <!-- 此参数是一个bean -->
                      <entry key="person" value-ref = 'personBean' />
                      <!--可以从作业执行容器获取此参数-->
                      <entry key="param1" value="com.custom.package.ClassName"/>   
                </map>  
        </property> 
</bean>
<bean id = 'personBean' class= 'com.corop.packname.Person'/>

(3)定义触发器,及(4)定义核心调度器 与 方式一同。

猜你喜欢

转载自weick.iteye.com/blog/1974314
今日推荐