Quartz简介
Quartz是一个开放源码项目,专注于任务调度器,提供了极为广泛的特性如持久化任务,集群和分布式任务等。
Spring对Quartz的集成与其对JDK Timer的集成在任务、触发器和调度计划的声明式配置方面等都非常相似。
Quartz的核心由两个接口和两个类组成:Job和Scheduler接口,JobDetail和Trigger类。不同于JDK Timer,
任务不是从实现一个Job接口的类实例开始运行,实际上Quartz在需要的时候才创建job类实例。可以使用JobDetail类来包装任务状态,
Quartz是一个开放源码项目,专注于任务调度器,提供了极为广泛的特性如持久化任务,集群和分布式任务等。
Spring对Quartz的集成与其对JDK Timer的集成在任务、触发器和调度计划的声明式配置方面等都非常相似。
Quartz的核心由两个接口和两个类组成:Job和Scheduler接口,JobDetail和Trigger类。不同于JDK Timer,
任务不是从实现一个Job接口的类实例开始运行,实际上Quartz在需要的时候才创建job类实例。可以使用JobDetail类来包装任务状态,
并传递一个信息给Job,或在一个Job的多次执行过程之间保存信息
package com.lzw.util;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import org.apache.log4j.Logger;
import org.springframework.context.ApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
/**
* @Description:服务初始化和 Quartz任务调度
* @author lzw
* @date 2013年9月23日 下午3:27:33
* @version V1.0
* @Copyright (c)
*/
public class InitServer implements ServletContextListener {
Logger logger = Logger.getLogger(InitServer.class);
private static ServletContext servletContext;
public static ServletContext getServletContext() {
return servletContext;
}
public void contextInitialized(ServletContextEvent contextEvent) {
servletContext = contextEvent.getServletContext();
final ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(servletContext);
SpringContextTool.setApplicationContext(ctx);
logger.info("服务启动!!");
}
/**
* @Description: Quartz任务调度执行方法,配置在applicationContext.xml文件中
*/
public void execute() {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date();
logger.info("任务调度开始!!");
logger.info("开始时间:" + simpleDateFormat.format(date));
new Thread(new Runnable() {
@Override
public void run() {
logger.info("====================");
}
}).start();
}
public void contextDestroyed(ServletContextEvent contextEvent) {}
}
applicationContext.xml文件中
<!-- Quartz 任务调度 -->
<bean id="SpringQuartzJob" class="com.lzw.util.InitServer" />
<bean id="SpringQtzJobMethod"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject">
<ref bean="SpringQuartzJob" />
</property>
<!-- 要执行的方法名称 -->
<property name="targetMethod">
<value>execute</value>
</property>
</bean>
<!-- 调度触发器 -->
<bean id="CronTriggerBean" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="SpringQtzJobMethod"></property>
<!-- =====================每天15点13分执行一次=======================
<property name="cronExpression" value="0 13 15 * * ?"></property> -->
<!-- =====================每10秒执行一次======================= -->
<property name="cronExpression" value="0/10 * * * * ?"></property>
</bean>
<!-- 调度工厂 -->
<bean id="SpringJobSchedulerFactoryBean"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="CronTriggerBean" />
</list>
</property>
</bean>
web.xml:
<listener>
<listener-class>com.lzw.util.InitServer</listener-class>
</listener>