J2EE中使用Spring集成quartz计划任务
来源:互联网 发布:linux 目录使用情况 编辑:程序博客网 时间:2024/05/19 19:33
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类:
- 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的操作。
- 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 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接口的实现,用来定义 执行的任务。
- 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]
- J2EE中使用Spring集成quartz计划任务
- Spring中使用任务计划
- Spring中使用任务计划
- Spring+Quartz实现计划任务
- 在J2EE环境中使用Quartz企业级计划调度器
- Spring集成Quartz任务调度
- Spring集成Quartz定时任务
- Spring集成Quartz定时任务
- spring中使用quartz实现定时任务
- Spring中使用Quartz任务调度
- spring中使用Quartz任务调度框架
- Spring中使用定时任务Quartz
- 在Spring框架中集成Quartz实现任务调度
- java计划任务quartz使用
- Quartz使用--关于计划任务
- Spring中集成quartz
- Spring集成Quartz定时任务框架介绍
- spring集成quartz定时任务的配置
- c#类成员(字段、属性、方法、事件)
- Mac常用操作
- linux多线程调试时,子线程不输出打印
- 进程空间&虚拟内存
- 乱序执行技术
- J2EE中使用Spring集成quartz计划任务
- Oracle temp file查询和resize
- 交换两个数组使两个数组和的差最小
- SQL优化
- c# 冒泡排序
- struts中的namespace
- 让我们的MAPLAB跑飞起来
- 第七周实验报告 任务二
- js 实现的算法