`

Quartz之QuartzInitializerListener

阅读更多
问题:我想在WEB容器启动时就执行任务怎么办呢
Quartz:使用QuartzInitializerListener就可办到了

请注意它的优先级别比QuartzInitializerServlet要高
在web.xml中可配置的参数如下:
如:
<context-param>
         <param-name>quartz:config-file</param-name>
         <param-value>/quartz.properties</param-value>
</context-param>

以下二者参数可代表都是同一个意思
quartz:config-file                                                       或者 config-file
quartz:shutdown-on-unload                                       或者  shutdown-on-unload
quartz:wait-on-shutdown
quartz:start-on-load                                                  或者   start-scheduler-on-load
quartz:start-delay-seconds                                        或者   start-delay-seconds
quartz:servlet-context-factory-key                              或者   servlet-context-factory-key
默认值为:org.quartz.impl.StdSchedulerFactory.KEY
quartz:scheduler-context-servlet-context-key              或者 scheduler-context-servlet-context-key

以上参数都是根据QuartzInitializerListener源码得来的
QuartzInitializerListener源码如下:
package org.quartz.ee.servlet;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import org.quartz.Scheduler;
import org.quartz.impl.StdSchedulerFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class QuartzInitializerListener implements ServletContextListener {
	
	public static final String QUARTZ_FACTORY_KEY = "org.quartz.impl.StdSchedulerFactory.KEY";
	private boolean performShutdown;
	private boolean waitOnShutdown;
	private Scheduler scheduler;
	private final Logger log;

	public QuartzInitializerListener() {
		this.performShutdown = true;
		this.waitOnShutdown = false;

		this.scheduler = null;

		this.log = LoggerFactory.getLogger(super.getClass());
	}

	public void contextInitialized(ServletContextEvent sce) {
		this.log
				.info("Quartz Initializer Servlet loaded, initializing Scheduler...");

		ServletContext servletContext = sce.getServletContext();
		try {
			String configFile = servletContext
					.getInitParameter("quartz:config-file");
			if (configFile == null)
				configFile = servletContext.getInitParameter("config-file");
			String shutdownPref = servletContext
					.getInitParameter("quartz:shutdown-on-unload");
			if (shutdownPref == null)
				shutdownPref = servletContext
						.getInitParameter("shutdown-on-unload");
			if (shutdownPref != null) {
				this.performShutdown = Boolean.valueOf(shutdownPref)
						.booleanValue();
			}
			String shutdownWaitPref = servletContext
					.getInitParameter("quartz:wait-on-shutdown");
			if (shutdownPref != null)
				this.waitOnShutdown = Boolean.valueOf(shutdownWaitPref)
						.booleanValue();

			StdSchedulerFactory factory;

			if (configFile != null)
				factory = new StdSchedulerFactory(configFile);
			else {
				factory = new StdSchedulerFactory();
			}

			this.scheduler = factory.getScheduler();

			String startOnLoad = servletContext
					.getInitParameter("quartz:start-on-load");
			if (startOnLoad == null) {
				startOnLoad = servletContext
						.getInitParameter("start-scheduler-on-load");
			}
			int startDelay = 0;
			String startDelayS = servletContext
					.getInitParameter("quartz:start-delay-seconds");
			if (startDelayS == null)
				startDelayS = servletContext
						.getInitParameter("start-delay-seconds");
			try {
				if ((startDelayS != null) && (startDelayS.trim().length() > 0))
					startDelay = Integer.parseInt(startDelayS);
			} catch (Exception e) {
				this.log
						.error("Cannot parse value of 'start-delay-seconds' to an integer: "
								+ startDelayS + ", defaulting to 5 seconds.");
				startDelay = 5;
			}

			if ((startOnLoad == null)
					|| (Boolean.valueOf(startOnLoad).booleanValue()))
				if (startDelay <= 0) {
					this.scheduler.start();
					this.log.info("Scheduler has been started...");
				} else {
					this.scheduler.startDelayed(startDelay);
					this.log.info("Scheduler will start in " + startDelay
							+ " seconds.");
				}
			else {
				this.log
						.info("Scheduler has not been started. Use scheduler.start()");
			}

			String factoryKey = servletContext
					.getInitParameter("quartz:servlet-context-factory-key");
			if (factoryKey == null)
				factoryKey = servletContext
						.getInitParameter("servlet-context-factory-key");
			if (factoryKey == null) {
				factoryKey = "org.quartz.impl.StdSchedulerFactory.KEY";
			}

			this.log
					.info("Storing the Quartz Scheduler Factory in the servlet context at key: "
							+ factoryKey);

			servletContext.setAttribute(factoryKey, factory);

			String servletCtxtKey = servletContext
					.getInitParameter("quartz:scheduler-context-servlet-context-key");
			if (servletCtxtKey == null)
				servletCtxtKey = servletContext
						.getInitParameter("scheduler-context-servlet-context-key");
			if (servletCtxtKey != null) {
				this.log
						.info("Storing the ServletContext in the scheduler context at key: "
								+ servletCtxtKey);

				this.scheduler.getContext().put(servletCtxtKey, servletContext);
			}
		} catch (Exception e) {
			this.log.error("Quartz Scheduler failed to initialize: "
					+ e.toString());
			e.printStackTrace();
		}
	}

	public void contextDestroyed(ServletContextEvent sce) {
		if (!this.performShutdown) {
			return;
		}
		try {
			if (this.scheduler != null)
				this.scheduler.shutdown(this.waitOnShutdown);
		} catch (Exception e) {
			this.log.error("Quartz Scheduler failed to shutdown cleanly: "
					+ e.toString());
			e.printStackTrace();
		}

		this.log.info("Quartz Scheduler successful shutdown.");
	}
}






分享到:
评论

相关推荐

    quartz-2.3.2-API文档-中文版.zip

    赠送jar包:quartz-2.3.2.jar; 赠送原API文档:quartz-2.3.2-javadoc.jar; 赠送源代码:quartz-2.3.2-sources.jar; 赠送Maven依赖信息文件:quartz-2.3.2.pom; 包含翻译后的API文档:quartz-2.3.2-javadoc-API...

    quartz指南,Quartz 工程

    文件里面包括 1:Quartz开发指南.pdf 2:Quartz从入门到进阶.pdf 3:QuartzBeginnerExample一个附带的工程例子 4:quartz-1.6.1.zip Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它...

    quartz-1.6.0.jar和quartz-all-1.6.0.jar

    该压缩包内包含两个quartz的jar包, 分别是quartz-1.6.0.jar和quartz-all-1.6.0.jar

    quartz-2.3.0-API文档-中文版.zip

    赠送jar包:quartz-2.3.0.jar; 赠送原API文档:quartz-2.3.0-javadoc.jar; 赠送源代码:quartz-2.3.0-sources.jar; 赠送Maven依赖信息文件:quartz-2.3.0.pom; 包含翻译后的API文档:quartz-2.3.0-javadoc-API...

    quartz-2.2.3版本的quartz初始化sql语句

    quartz-2.2.3版本的quartz初始化sql语句

    quartz简单实例quartz简单实例

    quartz简单实例quartz简单实例quartz简单实例quartz简单实例

    Autofac.Extras.Quartz, Quartz.Net的Autofac集成.zip

    Autofac.Extras.Quartz, Quartz.Net的Autofac集成 Autofac.Extras.Quartz用于 Quartz.Net的Autofac集成包。Autofac.Extras.Quartz 为每个石英作业创建嵌套的litefime作用域。 完成作业执行后释放嵌套作用域。这允许...

    自开发实现Quartz Web管理工具

    网上能找到的Quartz Web管理的资料都是使用的一个国外人写的Quartz WebApp的东东,功能也很全面。但是作为自己的应用其实用不了那么多功能,一般我们只要可以定义一个job,指定一个Cron表达式完成工作即可,附带的...

    quartz quartz-1.8.6 dbTables 建表sql

    quartz quartz-1.8.6 dbTables quartz动态任务调度需要的数据库脚本。

    quartz内部表.sql

    quartz内部表.sql。

    quartz1.5,quartz1.6,quartz1.8

    Quartz1.5,Quartz1.6,Quartz1.8。Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个...

    postgres-quartz.sql

    postgres quatrz初始化sql脚本文件、pg、quartz、qrtz_开头的表 配置文件需求修改 #org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate org.quartz.jobStore....

    Quartz.NET-2.0

    Quartz.NET框架的核心是调度器。调度器负责管理Quartz.NET应用运行时环境。Quartz不仅仅是线程和线程管理。为确保可伸缩性,Quartz.NET采用了基于多线程的架构。启动时,框架初始化一套worker线程,这套线程被调度器...

    Quartz原理及实例

    Quartz原理及实例,spring4.x+Quartz.2.2.1结合的开发,静态和动态实例

    lucene与quartz例子

    lucene quartz 例子lucene quartz 例子lucene quartz 例子lucene quartz 例子lucene quartz 例子lucene quartz 例子lucene quartz 例子lucene quartz 例子lucene quartz 例子lucene quartz 例子

    关于spring中quartz的配置

    关于spring中quartz的配置

    深入解读Quartz的原理

    深入解读Quartz的原理,定时任务框架是web开发过程中使用很多的框架之一

    Quartz-2.0.2 CSDN下载

    Quartz框架的核心是调度器。调度器负责管理Quartz应用运行时环境。调度器不是靠自己做所有的工作,而是依赖框架内一些非常重要的部件。 Quartz不仅仅是线程和线程管理。为确保可伸缩性,Quartz采用了基于多线程的...

    Quartz之CronExpression详解

    详细介绍CronExpression表达式设定定时任务的规则

    quartz3种调度形式+传参.zip

    quartz自动调度的3种调度形式+传参 1.单纯的quartz调度 2.spring+quartz调度

Global site tag (gtag.js) - Google Analytics