`

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 quartz-1.8.6 dbTables 建表sql

    Quartz 是一个开源的作业调度框架,广泛应用于Java应用程序中,用于执行定时任务。它提供了丰富的API和灵活性,使得开发者可以方便地定义、安排和管理各种任务。版本1.8.6是Quartz的一个稳定版本,它包含了对数据库...

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

    Quartz是一款广泛使用的开源任务调度框架,它允许开发者在Java应用程序中定义和执行定时任务。在Quartz 2.2.3版本中,初始化数据库是使用Quartz的关键步骤,因为Quartz依赖于一个持久化存储来保存作业和触发器的信息...

    quartz_2.3.0 SQL脚本

    1. **Oracle数据库脚本** (`tables_oracle.sql`): Oracle是关系型数据库管理系统之一,以其高性能和企业级特性著名。Quartz的Oracle脚本会创建如`QRTZ_TRIGGERS`, `QRTZ_JOB_DETAILS`, `QRTZ_CALENDARS`等核心表,...

    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...

    Android studio下的quartz工程

    **Android Studio下的Quartz工程详解** Quartz是一个开源的作业调度框架,广泛应用于Java环境中的任务调度。在Android Studio中使用Quartz,可以为应用程序添加定时执行的任务功能,例如定期发送通知、更新数据或者...

    quartz创建表sql

    Quartz 是一个开源的作业调度框架,广泛应用于Java企业级应用中,用于自动化任务执行,如定时触发工作流、发送邮件、数据同步等。在Quartz的部署和配置过程中,为了存储作业和触发器的信息,我们需要在关系型数据库...

    关于spring中quartz的配置

    在Spring框架中集成Quartz是一款常见的任务调度解决方案,它允许开发者在应用中安排定时任务的执行。Quartz是一个开源的作业调度框架,可以用来在Java应用程序中安排复杂的作业任务。以下将详细介绍如何在Spring中...

    Quartz.NET 官方源码及演示例子

    这个框架的强大之处在于它的灵活性和可扩展性,使得开发者能够创建复杂的调度逻辑,以满足各种自动化需求。以下是对Quartz.NET及其官方源码和演示例子的详细解析。 **Quartz.NET核心概念** 1. **作业(Jobs)**:...

    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 线程池

    Quartz 是一个开源的作业调度框架,它允许开发者在 Java 应用程序中安排任务的执行。线程池是 Quartz 的核心组成部分,用于管理和执行触发的任务。本文将深入探讨 Quartz 线程池的工作原理、配置以及如何在实际项目...

    Quartz 批量下载源码

    Quartz 批量下载源码,Quartz 批量下载源码Quartz 批量下载源码Quartz 批量下载源码Quartz 批量下载源码Quartz 批量下载源码Quartz 批量下载源码Quartz 批量下载源码Quartz 批量下载源码Quartz 批量下载源码

    quartz scheduler 入门教程

    quartz scheduler 入门教程 Quartz Scheduler 是一种功能丰富、开源的任务调度程序库,可以在任何 Java 程序中使用。它可以用来创建简单或者复杂的执行次数可以达成千上万的任务。任务可以是任何 Java 可以做的事情...

    Quartz所需jar包

    Quartz是一款开源的作业调度框架,它允许开发者在Java应用程序中定义和执行复杂的定时任务。在Java应用开发中,Quartz常被用来自动化各种后台任务,如数据清理、报告生成等。"Quartz所需jar包"是使用Quartz库进行...

    quartz实例,quartz入门例子

    Quartz是一款开源的作业调度框架,它允许开发者创建、组织和执行计划任务。这个实例是为初学者设计的,用于帮助理解Quartz的基本概念和使用方式。在MyEclipse 6.0.1环境下,你可以直接运行这个Spring整合Quartz的...

    quartz和spring-quartz

    Quartz和Spring-Quartz是两个在Java世界中广泛使用的定时任务管理框架。Quartz是一个开源的作业调度框架,允许应用程序定义和调度任务在特定时间执行。而Spring-Quartz则是Spring框架对Quartz的集成,它使得在Spring...

    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是一个功能丰富的开源作业调度库,几乎可以集成在任何Java应用程序中 - 从最小的独立应用程序到最大的电子商务系统。Quartz可用于创建简单或复杂的计划,以执行数十,数百甚至数万个作业; 将任务定义为标准...

    Quartz 定时WebForm和WinForm使用的dll

    Quartz是一个开源的作业调度框架,它允许开发者在应用程序中定义和执行定时任务。这个标题“Quartz 定时WebForm和WinForm使用的dll”暗示了我们将在WebForm和WinForm应用中使用Quartz来实现定时功能。在.NET环境中,...

    quartz实例sqlserver数据库连接

    Quartz是一款开源的作业调度框架,它允许开发者在应用程序中安排任务执行,比如定时执行某个方法或服务。在“quartz实例sqlserver数据库连接”这个主题中,我们主要讨论如何配置Quartz与SQL Server数据库进行交互,...

    Quartz.net-定时任务 Demo

    Quartz.NET是一款强大的开源作业调度框架,用于在.NET环境中创建和执行定时任务。这个"Quartz.net-定时任务 Demo"示例将展示如何利用Quartz.NET来安排代码在指定时间后执行,比如几十分钟后的场景。 Quartz.NET的...

Global site tag (gtag.js) - Google Analytics