Quartz 框架的应用
本文将简单介绍在没有 Spring 的时候..如何来使用 Quartz...
这里跳过 Quartz 的其他介绍。如果想更加输入的了解 Quartz,大家可以点击下载Quartz的帮助文档。
Quartz 和 Web 集成应用
第一步: 导入quartz包..这个不用说吧..放到工程的 lib 下面即可
第二步: 添加相应文件和修改web.xml文件的配置.
添加 quartz.properties 和 quartz_jobs.xml 到 src 下面
quartz.properties文件如下:
#----------调度器属性-------------
org.quartz.scheduler.instanceName = QuartzScheduler
org.quartz.scheduler.instanceId = AUTO #------------线程配置------------------
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 5
org.quartz.threadPool.threadPriority = 5 #---------------作业存储设置---------------
org.quartz.jobStore.class=org.quzrtz.simpl.RAMJobStore #---------------插件配置---------------- 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框架(第一版)
任务调度 在企业级应用中,经常会制定一些"计划任务",即在某个时间点做某件事情 核心是以时间为关注点,即在一个特定的时间点,系统执行指定的一个操作 任务调度涉及多线程并发.线程池维 ...
- Quartz框架
Quartz框架 Quartz 是个开源的作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制.Quartz 允许开发人员根据时间间隔(或天)来调度作业.它实现了作业和触发器的多 ...
- 【淘淘】Spring整合Quartz框架
我在外面工作实习的时候,我们做的项目是一个日报子系统,也就是定时定点为公司生成一些报表数据还有一些数据反馈.这时候我们会经常用到定时任务,比如每天凌晨生成前天报表,每一小时生成汇总数据等等.当时,我做 ...
- java任务调度quartz框架的小例子
quartz是一个开源的作业调度框架,当然,java可以使用Timer来实现简单任务调度的功能,但Timer是单线程的设计方案,使得一个任务延迟会影响到其他的任务.java也可以使用Scheduled ...
- Quartz框架简介
一.Quartz概述: Quartz是一个完全由Java编写的开源任务调度的框架,通过触发器设置作业定时运行规则,控制作业的运行时间.其中quartz集群通过故障切换和负载平衡的功能,能给调度器带来高 ...
- [译]Quartz 框架 教程(中文版)2.2.x 之第一课 开始使用Quartz框架
第一课:开始使用Quartz框架 在你使用调度器之前,需要借助一些具体的例子去理解(谁愿意只是猜啊?).你可以使用SchedulerFactory类来达到程序调度的目的.有一些Quartz框架的用户可 ...
- Spring框架下的定时任务quartz框架的使用
手头的这个项目需要用到定时任务,但之前没接触过这东西,所以不太会用,从网上找资料,大致了解了一下,其实也不难.Java的定时任务实现有三种,一种是使用JDK自带的Timer那个类来实现,另一种是使用q ...
- Quartz框架学习(1)—核心层次结构
Quartz框架学习 Quartz(任务调度)框架的核心组件: job:任务.即任务调度行为中所要调度的对象. trigger:触发器.是什么促使了一个任务的调度?当然是时间.这也算事件驱动类型程序. ...
- 使用Quartz框架定时发送预警邮件
1. Quartz定时发送预警邮件 1.1. 需求及实现思路 定时查询库存预警信息,一旦存在库存预警的商品,则发邮件通知相关人员 1.2. Quartz框架 Quartz是OpenSymph ...
- Quartz框架多个trigger任务执行出现漏执行的问题分析--转
原文地址:http://blog.csdn.net/dailywater/article/details/51470779 一.问题描述 使用Quartz配置定时任务,配置了超过10个定时任务,这些定 ...
随机推荐
- SQL语句-批量插入表(表数据插表)
批量插入表(表数据插表) ****1.INSERT INTO SELECT语句语句形式为:Insert into Table2(field1,field2,...) select value1,val ...
- JavaScript求最大数最小数
<!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8" ...
- Windows CMD命令大全【转】
命令简介 cmd是command的缩写.即命令行 . 虽然随着计算机产业的发展,Windows 操作系统的应用越来越广泛,DOS 面临着被淘汰的命运,但是因为它运行安全.稳定,有的用户还在使用,所以一 ...
- AjaxControlToolkit MaskedEdit Unspecified error 未指定错误
使用AjaxControlToolkit 里面的 MaskedEditValidator控件,IE里面在如下的js中出现未指定(Unspecified error)错误, if (document.a ...
- 使用GITHUB的体会
github的网页链接 https://github.com/zhangji123/test 学习总结 通过学习使用github软件使我掌握了其使用方法及其独特之处 1.github的网址: htt ...
- [MongoDB]Mongodb攻略
-------------------------------------------------------------------------------------------- [基础] 1. ...
- 巧用Javascript中的slice()
slice()是Javascript中Array的一个方法,定义是这样的. arrayObject.slice(start,end)作用是从原数组中从start到end位置截取出一个新的数组,返回值是 ...
- EF常用查询写法
1.var list = from category in context.category join commodity in context.commodity on category.id eq ...
- net.sf.json.JSONObject 和org.json.JSONObject 的差别
http://my.oschina.net/wangwu91/blog/340721 net.sf.json.JSONObject 和org.json.JSONObject 的差别. 一.创建jso ...
- opengles2.0之图元装配和光栅化
光栅化的过程就是把三维世界中的物体转换成屏幕上像素的过程. glGetfloatv(); --------v表示的是数组 gles2.0里面有两种绘图命令.glDrawArrays和glDraw ...