`
yangpanwww
  • 浏览: 625000 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Quartz 框架的应用

 
阅读更多

这里是 Quartz在Spring中的简单使用 http://yangpanwww.iteye.com/blog/797563

 

本文将简单介绍在没有 Spring 的时候..如何来使用 Quartz...

 

这里跳过 Quartz 的其他介绍。如果想更加输入的了解 Quartz,大家可以点击下载Quartz的帮助文档。

 

Quartz 和 Web 集成应用

 

第一步: 导入quartz包..这个不用说吧..放到工程的 lib 下面即可

 

第二步: 添加相应文件和修改web.xml文件的配置.

        添加 quartz.properties 和 quartz_jobs.xml 到 src 下面

 

       quartz.properties文件如下:

 

#===============================================================     
#Configure Main Scheduler Properties     
#===============================================================       
org.quartz.scheduler.instanceName = QuartzScheduler       
org.quartz.scheduler.instanceId = AUTO     
 
#===============================================================     
#Configure ThreadPool     
#===============================================================       
org.quartz.threadPool.threadCount = 5       
org.quartz.threadPool.threadPriority = 5       
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool     
 
#===============================================================     
#Configure JobStore     
#===============================================================       
org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore     
 
#===============================================================     
#Configure Plugins    
#===============================================================       
org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.JobInitializationPlugin      
org.quartz.plugins.xml.JobInitializationPlugin = quartz_jobs.xml   
      
org.quartz.plugin.jobInitializer.overWriteExistingJobs = false      
org.quartz.plugin.jobInitializer.validating = false      
org.quartz.plugin.jobInitializer.failOnFileNotFound =true 

 

 quartz_jobs.xml 文件如下

<?xml version="1.0" encoding="UTF-8"?>
<quartz>
	<job>

		<job-detail>
			<name>GatherJob</name>
			<group>DEFAULT</group>
			<description>GatherJob</description>
			<job-class>net.sf.rain.gather.quartz.GatherJob</job-class>
			<volatility>false</volatility>
			<durability>false</durability>
			<recover>false</recover>
		</job-detail>

		<trigger>
			<cron>
				<name>RunQuartzJobTrigger</name>
				<group>DEFAULT</group>
				<description>RunQuartzJobTrigger</description>
				<job-name>RunQuartzJob</job-name>
				<job-group>DEFAULT</job-group>
				<!--  <cron-expression>0/60 * * * * ?</cron-expression> -->
				<cron-expression>0 0 3 * * ?</cron-expression>
			</cron>
		</trigger>

	</job>
</quartz>

 

 

注意文件中的配置要正确。比如 job-class 等等。

 

 

web.xml的配置:

 

        从 2.3 版本的 Servlet API 开始,你能创建监听器,由容器在其生命周期中的某个特定时间回调。其中的一个监听器接口叫做 java.servlet.ServletContextListener

  

WEB.xml

     

	<!-- ====================== Quartz config start ====================== -->
	<context-param>
		<param-name>config-file</param-name>
		<param-value>/quartz.properties</param-value>
	</context-param>

	<context-param>
		<param-name>shutdown-on-unload</param-name>
		<param-value>true</param-value>
	</context-param>

	<context-param>
		<param-name>start-scheduler-on-load</param-name>
		<param-value>true</param-value>
	</context-param>
	<!-- 默认情况下配置 Quzrtz 自带的监听器..但是真正项目开发中。我们是否开启定时任务应该是人工配置,所以我们需要自定义监听器 -->
	<!-- 
	<listener>
     	<listener-class>org.quartz.ee.servlet.QuartzInitializerListener</listener-class>
    </listener>
	-->
	<listener>  
	   <listener-class>  
	  		net.sf.rain.gather.quartz.QuartzServletContextListener   
	   </listener-class>  
	</listener> 
	 
	<!-- ====================== Quartz config end ====================== -->

 

    下面我们将实现这个监听器   QuartzServletContextListener

 

   

package net.sf.rain.gather.quartz;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.quartz.SchedulerException;
import org.quartz.impl.StdSchedulerFactory;

public class QuartzServletContextListener implements ServletContextListener {

	private static  Log _log = LogFactory.getLog(QuartzServletContextListener.class);

	public static final String QUARTZ_FACTORY_KEY = "org.quartz.impl.StdSchedulerFactory.KEY";
	private ServletContext ctx = null;
	private StdSchedulerFactory factory = null;

	/**
	 * Called when the container is shutting down. 
	 */
	public void contextDestroyed(ServletContextEvent sce) {
		try {
			factory.getDefaultScheduler().shutdown();
		} catch (SchedulerException ex) {
			_log.error("Error stopping Quartz", ex);
		}
	}

	
	/**
	 * 容器的第一次启动时调用
	 */
	public void contextInitialized(ServletContextEvent sce) {
		ctx = sce.getServletContext();
		try {
			factory = new StdSchedulerFactory();
			// Start the scheduler now
			//设置容器启动时不立即启动定时器,而是到后台人工启动
			//factory.getScheduler().start();
			_log.info("Storing QuartzScheduler Factory at" + QUARTZ_FACTORY_KEY);
			ctx.setAttribute(QUARTZ_FACTORY_KEY, factory);

		} catch (Exception ex) {
			_log.error("Quartz failed to initialize", ex);
		}
	}

}

 

 下面的Action将管理定时器的状态

 

package net.sf.rain.gather.quartz;

import java.io.PrintWriter;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.impl.StdSchedulerFactory;

/**
 * 
 * 调度器管理 
 * 
 * @author 妞见妞爱
 *
 */
public class GatherJobAction extends  Action{

	private static  Log _log = LogFactory.getLog(GatherJobAction.class);
	
	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		
		request.setCharacterEncoding("UTF-8");
		response.setContentType("text/html;charset=UTF-8");
		
		String action = request.getParameter("action");
		  
        
        String retMsg = "Parameter Error: action is null";
        if (StringUtils.isNotBlank(action)) {
    		ServletContext ctx =  request.getSession().getServletContext();
            // Retrieve the factory from the ServletContext   
            StdSchedulerFactory factory =  (StdSchedulerFactory)ctx.getAttribute(QuartzServletContextListener.QUARTZ_FACTORY_KEY);   
            // Retrieve the scheduler from the factory   
            Scheduler scheduler = factory.getScheduler(); 
            
        	if ("start".equals(action)) {
    			// Start the scheduler 
    	        try {
    	        	 if (!scheduler.isStarted()) {
    	        		 scheduler.start();
    	        	 }
    	        	 retMsg = "Quartz Successful to startup";
    			 } catch (SchedulerException ex) {
    				 _log.error("Error starting Quartz", ex);
    				 retMsg = "Quartz failed to startup";
    			 }
    		}else if("stop".equals(action)){
    			try {
    				if (scheduler.isStarted()) {
    					scheduler.shutdown();
    				}
    				retMsg = "Quartz Successful to stopping";
    			 } catch (SchedulerException ex) {
    				_log.error("Error stopping Quartz", ex);
    				retMsg = "Quartz failed to stopping";
    			 }
    		}else { //查看调度器的状态
				if (scheduler.isStarted()) {
					retMsg = "Quartz is Started";
				}else {
					retMsg = "Quartz is Stoped";
				}
			}
		}
        
		PrintWriter out = response.getWriter();
		out.print(retMsg);
		out.flush();
		out.close();
		
		return null;
	}


}

  

 

   有点事情。。忙会。。哈哈。。应该差不多了。。。。

 

 

分享到:
评论

相关推荐

    Quartz 框架快速入门

    Quartz 框架快速入门 在前面两篇文章中简单介绍了在java应用程序中如何使用Quartz框架,这一篇中我们将看到如何在web环境下通过配置文件来完成Quartz的后台作业调度,而不必手工去创建Trigger和Scheduler

    Quartz框架快速入门

    ### Quartz框架快速入门详解 #### 一、Quartz框架简介 Quartz是一个开源的作业调度框架,用于开发Java应用程序。它提供了强大的触发器(Trigger)机制用于关联作业(Job),同时还具备灵活的表达式用于配置定时...

    springboot与quartz框架整合

    SpringBoot和Quartz框架整合是企业级应用中常见的任务调度解决方案。SpringBoot以其简洁的配置、自动配置特性以及对各种Spring生态的友好支持,成为快速开发微服务的首选框架。而Quartz则是一个强大且灵活的开源作业...

    Quartz框架快速入门.pdf

    Quartz框架是一款强大的开源任务调度库,广泛应用于Java环境下的定时任务管理。要开始使用Quartz,首先需要在项目中引入必要的依赖。基础依赖是quartz-&lt;version&gt;.jar,这是Quartz的核心库。除此之外,根据你的需求,...

    Quartz调度框架应用总结

    Quartz调度框架应用总结

    Quartz定时任务框架

    Quartz是一款开源的作业调度框架,它为Java应用程序提供了强大的定时任务管理能力。作为一个专业的IT行业大师,我将深入解析Quartz的核心概念、工作原理以及如何实现简单的定时任务。 Quartz的主要功能在于允许...

    quartz定时任务框架

    quartz框架的应用: 1. 垃圾图片处理:quartz框架可以用于垃圾图片的清理工作。例如,在图片上传成功后,将图片名称存放到redis中,在清理垃圾图片的时候,对比两个set集合中数据。 2. 定时任务执行:quartz框架...

    Java任务调度框架Quartz教程实例

    #### 一、Quartz框架简介 Quartz是一个功能齐全、开源的任务调度服务框架,它可以被集成到几乎所有类型的Java应用程序中,无论是小型的独立应用还是大型的企业级系统,甚至是复杂的电子商务平台。Quartz框架支持...

    spring-boot使用quartz框架定时发送邮件

    在这个场景中,我们将讨论如何在Spring Boot中集成Quartz框架来实现定时发送邮件的功能,以及如何从数据库中读取数据生成报表。 首先,我们需要在Spring Boot项目中引入Quartz的相关依赖。在`pom.xml`或`build....

    Quartz_框架快速入门

    Quartz 是一个强大的、开放源代码的作业调度框架,用于在 Java 应用程序中安排任务。它的主要作用是允许程序员或系统管理员定义任务(Job),并设定这些任务在特定的时间点或按照特定的周期运行。本文将引导您快速...

    Quartz的应用实例

    这篇博客文章“Quartz的应用实例”可能详细介绍了如何在Spring框架中集成Quartz,以及如何利用Quartz进行任务调度。 Quartz的核心概念包括: 1. **Job**:表示一个可执行的任务,它定义了实际要执行的工作。你可以...

    spring-boot-quartz-demo, 使用Quartz框架的样例 Spring Boot 应用程序.zip

    spring-boot-quartz-demo, 使用Quartz框架的样例 Spring Boot 应用程序 spring-boot-quartz-demo使用Quartz框架的样例 Spring Boot 应用程序基于 https://gist.github.com/jelies/5085593 附加功能( 断点,失火处理...

    Quartz - 作业调度框架

    Quartz是一款广泛应用于Java环境中的开源作业调度框架,它的核心功能是实现任务的自动化执行,如定时触发、周期性执行等。Quartz以其强大的灵活性和稳定性,在企业级应用中占据了重要地位,尤其对于需要定时执行任务...

    Java框架介绍Quartz从入门到进阶.pdf

    Quartz框架介绍和应用 Quartz是一个完全由Java编写的开源作业调度框架,用于企业级的作业调度和自动化处理。Quartz框架提供了强大的作业调度功能,能够满足复杂的作业调度需求,例如每天或每周星期二晚上11:30、每...

    quartz框架demo,适用于初学者

    Quartz框架是一款强大的任务调度库,广泛应用于Java企业级开发中,用于自动化执行定时任务。这个"quartz框架demo"是专为初学者设计的,旨在帮助他们快速理解和上手Quartz的使用。 首先,我们要了解Quartz的核心概念...

    任务调度Quartz框架

    Quartz框架自2001年发布以来,已经在许多项目中得到广泛应用。它提供了灵活的时间表定义,使得开发者可以精确地设定任务的触发时间。Quartz不仅支持一次性任务,还支持周期性的重复任务。框架的核心特性包括: 1. *...

    Quartz作业调度框架

    Quartz框架为企业应用中的作业调度提供了一个强大而灵活的解决方案。 Quartz的发展历程始于其开源项目的建立,通过不断的发展,它已经成为一个成熟的框架。开发人员可以通过下载安装Quartz,也可以通过从源代码构建...

Global site tag (gtag.js) - Google Analytics