J2EE中使用Spring集成quartz计划任务
2012-04-03 15:26
507 查看
Spring提供了对quartz的集成,这样在j2ee的应用中,可以很方便的实现我们的任务计划,比如:你可以设定每天半夜的时候,来实现备份数据库,记录日志,因为这个时候web的压力相对比较小。也可以用来定时的发EMAIL等。
1、Spring中集成quartz 首先需要在web.xml 中配置个quartz的监听器。这样,随着WEB程序的启动,会自动启动quartz的调度配置。
Web.xml 中加入 监听器:
<listener>
<listener-class>com.yangxinyong.quartz.listener.QuartzServiceLoader</listener-class>
</listener>
2、QuartzServiceLoader 实现了 javax.servlet.ServletContextListener ,里面有两个方法。
QuartzServiceLoader类:
Java代码
public class QuartzServiceLoader implements ServletContextListener {
public void contextDestroyed(ServletContextEvent arg0) {
try {
//监听器关闭时关闭Sheduler
JobListener.stop();
} catch (Exception ex) {
System.out.println(ex.getMessage());
}
}
public void contextInitialized(ServletContextEvent arg0) {
try { //监听器启动时启动Sheduler
JobListener.run();
} catch (Exception ex) {
System.out.println(ex.getMessage());
}
}
}
3、此时,我们要新建个 JobListener 类 ,来读取配置文件applicationContext-quartz.xml,启动quartz的计划任务配置,以及关闭监听时的关闭quartz的操作。
Java代码
package com.yangxinyong.quartz.listener;
import org.quartz.Scheduler;
import org.quartz.impl.StdSchedulerFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;
import org.springframework.scheduling.quartz.CronTriggerBean;
import org.springframework.scheduling.quartz.JobDetailBean;
/**
* @author Seyo816@gmail.com
*/
public class JobListener
{
public static void run() throws Exception {
ClassPathResource res = new ClassPathResource( "applicationContext-quartz.xml" );
XmlBeanFactory factory = new XmlBeanFactory( res );
JobDetailBean job = ( JobDetailBean ) factory
.getBean( "Job" );
CronTriggerBean trigger = ( CronTriggerBean ) factory
.getBean( "cronTrigger" );
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler( );
scheduler.start( );
scheduler.scheduleJob( job, trigger );
}
public static void stop() throws Exception {
}
}
其中applicationContext-quartz.xml 放在classpath路径下,应用程序才可以找到该配置文件。配置文件定义了一个job bean 以及 触发器cronTrigger bean ,最后 通过 SchedulerFactoryBean 添加 添加触发器 。
applicationContext-quartz.xml 代码:
Xml代码
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean name="Job" class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass">
<value>com.yangxinyong.quartz.listener.Job</value>
</property>
<property name="jobDataAsMap">
<map>
<entry key="email"><value>seyo816@gmail.com</value></entry>
</map>
</property>
</bean>
<bean id="cronTrigger" class="com.yangxinyong.quartz.listener.InitializingCronTrigger">
<property name="jobDetail">
<ref bean="Job"/>
</property>
<property name="cronExpression">
<value>0 50 16 * * ?</value>
</property>
</bean>
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<!-- 添加触发器 -->
<property name="triggers">
<list>
<ref local="cronTrigger"/>
</list>
</property>
</bean>
</beans>
3、job bean 对应的类:com.yangxinyong.quartz.listener.Job 是spring的 QuartzJobBean接口的实现,用来定义 执行的任务。
Java代码
package com.yangxinyong.quartz.listener;
import java.util.Date;
import org.quartz.JobDetail;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;
/**
* @author Seyo816@gmail.com
*/
public class Job extends QuartzJobBean {
private String email;
protected void executeInternal(JobExecutionContext context)
throws JobExecutionException {
JobDetail job= context.getJobDetail();
System.out.println(new Date()+":"+job.getName()+"["+email+"]");
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
该job只是简单的 在控制台中输出 一串字符串。
最后你可以 部署该 web应用,根据触发器中的时间配置,将实现 每天的16:50分的时候 执行操作。我们可以看到下面的输出字符串。
Tue Nov 18 16:50:00 CST 2008:Job[seyo816@gmail.com]
1、Spring中集成quartz 首先需要在web.xml 中配置个quartz的监听器。这样,随着WEB程序的启动,会自动启动quartz的调度配置。
Web.xml 中加入 监听器:
<listener>
<listener-class>com.yangxinyong.quartz.listener.QuartzServiceLoader</listener-class>
</listener>
2、QuartzServiceLoader 实现了 javax.servlet.ServletContextListener ,里面有两个方法。
QuartzServiceLoader类:
Java代码
public class QuartzServiceLoader implements ServletContextListener {
public void contextDestroyed(ServletContextEvent arg0) {
try {
//监听器关闭时关闭Sheduler
JobListener.stop();
} catch (Exception ex) {
System.out.println(ex.getMessage());
}
}
public void contextInitialized(ServletContextEvent arg0) {
try { //监听器启动时启动Sheduler
JobListener.run();
} catch (Exception ex) {
System.out.println(ex.getMessage());
}
}
}
3、此时,我们要新建个 JobListener 类 ,来读取配置文件applicationContext-quartz.xml,启动quartz的计划任务配置,以及关闭监听时的关闭quartz的操作。
Java代码
package com.yangxinyong.quartz.listener;
import org.quartz.Scheduler;
import org.quartz.impl.StdSchedulerFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;
import org.springframework.scheduling.quartz.CronTriggerBean;
import org.springframework.scheduling.quartz.JobDetailBean;
/**
* @author Seyo816@gmail.com
*/
public class JobListener
{
public static void run() throws Exception {
ClassPathResource res = new ClassPathResource( "applicationContext-quartz.xml" );
XmlBeanFactory factory = new XmlBeanFactory( res );
JobDetailBean job = ( JobDetailBean ) factory
.getBean( "Job" );
CronTriggerBean trigger = ( CronTriggerBean ) factory
.getBean( "cronTrigger" );
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler( );
scheduler.start( );
scheduler.scheduleJob( job, trigger );
}
public static void stop() throws Exception {
}
}
其中applicationContext-quartz.xml 放在classpath路径下,应用程序才可以找到该配置文件。配置文件定义了一个job bean 以及 触发器cronTrigger bean ,最后 通过 SchedulerFactoryBean 添加 添加触发器 。
applicationContext-quartz.xml 代码:
Xml代码
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean name="Job" class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass">
<value>com.yangxinyong.quartz.listener.Job</value>
</property>
<property name="jobDataAsMap">
<map>
<entry key="email"><value>seyo816@gmail.com</value></entry>
</map>
</property>
</bean>
<bean id="cronTrigger" class="com.yangxinyong.quartz.listener.InitializingCronTrigger">
<property name="jobDetail">
<ref bean="Job"/>
</property>
<property name="cronExpression">
<value>0 50 16 * * ?</value>
</property>
</bean>
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<!-- 添加触发器 -->
<property name="triggers">
<list>
<ref local="cronTrigger"/>
</list>
</property>
</bean>
</beans>
3、job bean 对应的类:com.yangxinyong.quartz.listener.Job 是spring的 QuartzJobBean接口的实现,用来定义 执行的任务。
Java代码
package com.yangxinyong.quartz.listener;
import java.util.Date;
import org.quartz.JobDetail;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;
/**
* @author Seyo816@gmail.com
*/
public class Job extends QuartzJobBean {
private String email;
protected void executeInternal(JobExecutionContext context)
throws JobExecutionException {
JobDetail job= context.getJobDetail();
System.out.println(new Date()+":"+job.getName()+"["+email+"]");
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
该job只是简单的 在控制台中输出 一串字符串。
最后你可以 部署该 web应用,根据触发器中的时间配置,将实现 每天的16:50分的时候 执行操作。我们可以看到下面的输出字符串。
Tue Nov 18 16:50:00 CST 2008:Job[seyo816@gmail.com]
相关文章推荐
- 使用Spring来实现任务计划服务三:集成quartz任务调度框架
- Spring与Quartz集成实现定时调度任务的简单使用
- ssh中使用spring的集成quartz 编写定时任务
- 使用quartz和Spring-Task实现计划任务的四种方式
- Spring集成Quartz定时任务框架介绍和Cron表达式详解
- 在Spring中使用Quartz进行任务调度 (转:http://www.blogjava.net/Jay2009/archive/2009/03/25/259176.html)
- 使用Spring Quartz做自动任务 启动和关闭
- Spring集成quartz框架实现定时任务(一)
- 【springboot】 springboot集成quartz实现定时任务
- Spring集成Quartz定时任务框架介绍和Cron表达式详解
- Spring集成Quartz定时任务框架介绍和Cron表达式详解
- Spring集成Quartz定时任务框架介绍和Cron表达式详解
- Spring中使用任务计划 推荐
- Spring使用之:Quartz定时任务为什么会被阻塞
- Spring集成Quartz定时任务框架介绍和Cron表达式详解
- java计划任务quartz使用
- Spring集成Quartz定时任务框架介绍和Cron表达式详解
- Spring集成Quartz定时任务框架介绍和Cron表达式详解
- Quartz在.Net网站中的使用方法(定时任务计划)
- quartz 定时任务与spring集成