Spring+Quartz任务调度(一)

来源:互联网 发布:网络贷款app 编辑:程序博客网 时间:2024/04/30 15:46
Spring+Quartz任务调度

一.第一种配置

1.基础

(1)//调度类
package com.zx.timer.core.tasks;
 /**
 * 
 * @ClassName: QuartzJobTask 
 * @Description: TODO(定时任务类) 
 * @author lhq 
 * @date 2015年12月29日 下午4:03:50
 */
public class QuartzJobTask{
           public void execute() {

          }

}

(2)spring配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
        <context:annotation-config />
        <!-- 增加一个线程池;线程执行器配置,用于任务注册 -->
<bean id="executor"
class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
<property name="corePoolSize" value="50" />
<property name="maxPoolSize" value="100" />
<property name="queueCapacity" value="500" />
</bean>
         <!-- 要调用的工作类 -->
<bean id="quartzJobTask" class="com.zx.timer.core.tasks.QuartzJobTask">
</bean>
<!-- 定义调用对象和调用对象的方法 -->
<bean id="quartzJob"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<!-- 调用的类 -->
<property name="targetObject" ref="quartzJobTask" />
<!-- 调用类中的方法 -->
<property name="targetMethod" value="execute" />
<property name="concurrent" value="false" />
</bean>
<!-- 定义触发时间 -->
<bean id="quartzJobTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="quartzJob" />
<property name="cronExpression">
<value>0 0 0 * * ?</value>
</property>
</bean>
<!-- 总管理类 如果将lazy-init='false'那么容器启动就会执行调度程序 -->
<bean id="scheduler"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="quartzJobTrigger" />
</list>
</property>
<property name="taskExecutor" ref="executor" />
</bean>

</beans>


2.调度类前后执行业务逻辑方法
有时候,我们需要在调度类方法前后分别执行一些不同的业务逻辑

我们可以创建一个调度类的父类

(1)调度类父类

package com.zx.timer.core;

//执行任务预处理
public class ParentTask {
/**
* 负责获取执行任务信息前面执行操作
*/
public boolean beforeExecute() {

               return false;

        }

        /**

* 负责执行任务后工作
*/
public void afterExecute(boolean _self) {


}
         /**
* 执行编号指定的任务

*/
public void execute() {
}
public void executeTask() {
boolean _self = beforeExecute();
try {
if (_self) {
execute();
}
} finally {
afterExecute(_self);
}
}
}

(2)调度类
package com.zx.timer.core.tasks;
 /**
 * 
 * @ClassName: QuartzJobTask 
 * @Description: TODO(定时任务类) 
 * @author lhq 
 * @date 2015年12月29日 下午4:03:50
 */
public class QuartzJobTask extends ParentTask{
           public void execute() {

           }

}
(3)spring配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
         <context:annotation-config />
        <!-- 增加一个线程池;线程执行器配置,用于任务注册 -->
<bean id="executor"
class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
<property name="corePoolSize" value="50" />
<property name="maxPoolSize" value="100" />
<property name="queueCapacity" value="500" />
</bean>
        <bean id="parentTask " class="com.zx.timer.core.ParentTask ">
        <!-- 要调用的工作类 -->
<bean id="quartzJobTask" class="com.zx.timer.core.tasks.QuartzJobTask" parent="baseTask">
</bean>
<!-- 定义调用对象和调用对象的方法 -->
<bean id="quartzJob"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<!-- 调用的类 -->
<property name="targetObject" ref="quartzJobTask" />
<!-- 调用类中的方法 -->
<property name="targetMethod" value="executeTask" />
<property name="concurrent" value="false" />
</bean>
<!-- 定义触发时间 -->
<bean id="quartzJobTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="quartzJob" />
<property name="cronExpression">
<value>0 0 0 * * ?</value>
</property>
</bean>
<!-- 总管理类 如果将lazy-init='false'那么容器启动就会执行调度程序 -->
<bean id="scheduler"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="quartzJobTrigger" />
</list>
</property>
<property name="taskExecutor" ref="executor" />
</bean>
</beans>
0 0