web中使用Quartz

1、首先在web.xml文件中加入 如下内容(根据自己情况设定)

在web.xml中添加QuartzInitializerServlet,Quartz为能够在web应用中使用,提供了一个QuartzInitializerServlet和一个QuartzInitializerListener,用于在加载web应用时,对quartz进行初始化。

  1. <servlet>
  2. <servlet-name>
  3. QuartzInitializer
  4. </servlet-name>
  5. <servlet-class>
  6. org.quartz.ee.servlet.QuartzInitializerServlet
  7. </servlet-class>
  8. <init-param>
  9. <param-name>config-file</param-name>
  10. <param-value>/quartz.properties</param-value>
  11. </init-param>
  12. <init-param>
  13. <param-name>shutdown-on-unload</param-name>
  14. <param-value>true</param-value>
  15. </init-param>
  16. <load-on-startup>1</load-on-startup>
  17. </servlet>

2、quartz.properties文件的配置(各项属性说明下次写),内容如下:

上面提到了quartz.properties,这是自行指定的,Quartz提供了一个默认的配置文件,可以满足基本的j2se应用,如果在web应用中,我们想把job,trigger配置都写到文件中,就需要自己来写,并指定在初始化时加载我们自己的quratz.properties,位置放在classes下。

  1. org.quartz.scheduler.instanceName = TestScheduler
  2. org.quartz.scheduler.instanceId = one
  3.  
  4. org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
  5. org.quartz.threadPool.threadCount = 2
  6. org.quartz.threadPool.threadPriority = 4
  7.  
  8. org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.JobInitializationPlugin
  9. org.quartz.plugin.jobInitializer.fileName = quartz_job.xml
  10. org.quartz.plugin.jobInitializer.overWriteExistingJobs = false
  11. org.quartz.plugin.jobInitializer.failOnFileNotFound = true
  12. org.quartz.plugin.shutdownhook.class = org.quartz.plugins.management.ShutdownHookPlugin
  13. org.quartz.plugin.shutdownhook.cleanShutdown = true

3、 quartz_job.xml文件配置(各项属性说明下次写),内容如下:

quartz要使用插件来加载自己的xml配置文件,上面指定加载classes/quartz_job.xml文件。

以Quartz定时任务学习(一)中的简单作业SimpleQuartzJob为例子:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <quartz>
  3. <job>
  4. <job-detail>
  5. <name>listener1</name>
  6. <group>group1</group>
  7. <job-class>SimpleQuartzJob</job-class>
  8.  
  9. </job-detail>
  10. <trigger>
  11. <cron>
  12. <name>job1</name>
  13. <group>group1</group>
  14. <job-name>listener1</job-name>
  15. <job-group>group1</job-group>
  16. <cron-expression>0/10 * * * * ?</cron-expression>
  17. </cron>
  18. </trigger>
  19. </job>
  20.  
  21. </quartz>

Quartz定时任务学习(三)属性文件和jar

以下是我在应用的的一个基本配置:

#---------调度器属性----------------
org.quartz.scheduler.instanceName = TestScheduler
org.quartz.scheduler.instanceId = one

#---------线程配置---------------
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 2
org.quartz.threadPool.threadPriority = 4

#---------作业存储设置------------
org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore

#---------插件配置-------------

org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.JobInitializationPlugin
org.quartz.plugin.jobInitializer.fileName = quartz_job.xml
org.quartz.plugin.jobInitializer.overWriteExistingJobs = false
org.quartz.plugin.jobInitializer.failOnFileNotFound = true

org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.JobInitializationPlugin
org.quartz.plugin.jobInitializer.fileName = quartz_job.xml
org.quartz.plugin.jobInitializer.overWriteExistingJobs = false
org.quartz.plugin.jobInitializer.failOnFileNotFound = true

org.quartz.plugin.shutdownhook.class = org.quartz.plugins.management.ShutdownHookPlugin
org.quartz.plugin.shutdownhook.cleanShutdown = true

属性的介绍

1.调度器属性:分别设置调度器的实例名(instanceName) 和实例 ID (instanceId)。属性 org.quartz.scheduler.instanceName 可以是你喜欢的任何字符串。默认名字一般都采用QuartzScheduler,第二个属性org.quartz.scheduler.instanceId和instaneName 属性一样,instanceId 属性也允许任何字符串。这个值必须是在所有调度器实例中是唯一的,尤其是在一个集群当中。假如你想 Quartz 帮你生成这个值的话,可以设置为 AUTO。

2、线程池属性:这些线程在 Quartz 中是运行在后台担当重任的。threadCount 属性控制了多少个工作者线程被创建用来处理 Job。原则上是,要处理的 Job 越多,那么需要的工作者线程也就越多。threadCount 的数值至少为 1。Quartz 没有限定你设置工作者线程的最大值,但是在多数机器上设置该值超过100的话就会显得相当不实用了,特别是在你的 Job 执行时间较长的情况下。这项没有默认值,所以你必须为这个属性设定一个值。

threadPriority 属性设置工作者线程的优先级。优先级别高的线程比级别低的线程更优先得到执行。threadPriority 属性的最大值是常量 java.lang.Thread.MAX_PRIORITY,等于10。最小值为常量 java.lang.Thread.MIN_PRIORITY,为1。这个属性的正常值是Thread.NORM_PRIORITY,为5。大多情况下,把它设置为5,这也是没指定该属性的默认值。

最后一个要设置的线程池属性是 org.quartz.threadPool.class。这个值是一个实现了 org.quartz.spi.ThreadPool 接口的类的全限名称。Quartz 自带的线程池实现类是 org.quartz.smpl.SimpleThreadPool,它能够满足大多数用户的需求。这个线程池实现具备简单的行为,并经很好的测试过。它在调度器的生命周期中提供固定大小的线程池。你能根据需求创建自己的线程池实现,如果你想要一个随需可伸缩的线程池时也许需要这么做。这个属性没有默认值,你必须为其指定值。

3、作业存储属性:作业存储部分的设置描述了在调度器实例的生命周期中,Job 和 Trigger 信息是如何被存储的。把调度器信息存储在内存中非常的快也易于配置。当调度器进程一旦被终止,所有的 Job 和 Trigger 的状态就丢失了。要使 Job 存储在内存中需通过设置 org.quartz.jobStrore.class 属性为 org.quartz.simpl.RAMJobStore,在Cron Trigger 和“作业存储和持久化”会用到的不同类型的作业存储实现。

4、其他插件属性:org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.JobInitializationPlugin默认时,JobInitializationPlugin插件会在 classpath 中搜索名为 quartz_jobs.xml 的文件并从中加载 Job 和 Trigger 信息。其他插件后叙……

quartz_jobs.xml 配置和详解

实例:简单触发器

  1. <?xml version='1.0' encoding='utf-8'?>
  2. <quartz>
  3. <job>
  4. <job-detail>
  5. <name>ScanDirectory</name>
  6. <group>DEFAULT</group>
  7. <description>
  8. A job that scans a directory for files
  9. </description>
  10. <job-class>
  11. org.cavaness.quartzbook.chapter3.ScanDirectoryJob
  12. </job-class>
  13. <volatility>false</volatility>
  14. <durability>false</durability>
  15. <recover>false</recover>
  16. <job-data-map allows-transient-data="true">
  17. <entry>
  18. <key>SCAN_DIR</key>
  19. <value>c:/quartz-book/input</value>
  20. </entry>
  21. </job-data-map>
  22. </job-detail>
  23.  
  24. <trigger>
  25. <simple>
  26. <name>scanTrigger</name>
  27. <group>DEFAULT</group>
  28. <job-name>ScanDirectory</job-name>
  29. <job-group>DEFAULT</job-group>
  30. <start-time>2005-06-10 6:10:00 PM</start-time>
  31. <!-- repeat indefinitely every 10 seconds -->
  32. <repeat-count>-1</repeat-count>
  33. <repeat-interval>10000</repeat-interval>
  34. </simple>
  35. </trigger>
  36. </job>
  37. </quartz>

我们添加了属性 org.quartz.plugin.jobInitializer.fileName 并设置该属性值为我们想要的文件名。这个文件名要对 classloader 可见,也就是说要在 classpath 下。

第三方包

通过测试。一个简单任务只需要以下几个包:commons-beanutils.jar、commons-collections.jar、commons-logging.jar、commons-digester.jar、quartz.jar即可

名称 必须/备注 网址
activation.jar 主要是 JavaMail 要用到  http://java.sun.com/products/javabeans/glasgow/jaf.html
commons-beanutils.jar http://jakarta.apache.org/commons/beanutils
commons-collections.jar http://jakarta.apache.org/commons/collections
commons-dbcp-1.1.jar 是,假如用到数据库作为作业存储 http://jakarta.apache.org/commons/dbcp
commons-digester.jar 假如你使用了某些插件,就需要它
commons-logging.jar http://jakarta.apache.org/commons/logging/
commons-pool-1.1.jar   http://jakarta.apache.org/commons/pool/
javamail.jar 发送 e-mail 用 http://java.sun.com/products/javamail/
jdbc2_0-stdext.jar 是,假如用到数据库作为作业存储 http://java.sun.com/products/jdbc/
jta.jar 是,假如用到数据库作为作业存储 http://java.sun.com/products/jta/database
quartz.jar Quart 框架核心包
servlet.jar 假如使用了Servlet 容器,但容器中应该存在 http://java.sun.com/products/servlet/
log4j.jar 是,日志 http://logging.apache.org/

Quartz定时任务学习(二)web应用/Quartz定时任务学习(三)属性文件和jar的更多相关文章

  1. Quartz定时任务学习(三)属性文件和jar

    以下是我在应用的的一个基本配置: #---------调度器属性----------------org.quartz.scheduler.instanceName = TestSchedulerorg ...

  2. [原创]java WEB学习笔记99:Spring学习---Spring Bean配置:自动装配,配置bean之间的关系(继承/依赖),bean的作用域(singleton,prototype,web环境作用域),使用外部属性文件

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  3. JavaWeb学习 (二十六)————监听器(Listener)学习(二)

    一.监听域对象中属性的变更的监听器 域对象中属性的变更的事件监听器就是用来监听 ServletContext, HttpSession, HttpServletRequest 这三个对象中的属性变更信 ...

  4. (asp.net MVC学习)System.Web.Mvc.UrlHelper的学习与使用

    上一次学习了HtmlHelper帮助类,这次我们学习一下UrlHelper帮 助类,看类名也都知道这个类是用来帮我们生成URL在ASP.NET MVC应用程序中.让我们来看看该类给我们带来了哪些方便的 ...

  5. createjs学习二之flash转canvas学习1

    设置发布 或者 导出参数设置 c_lib_main c_images_main/ 导出之后的文件 打开导出的html文件可以看到如下,,可以正常显示的,,只是stop了还不能动 给舞台上某一元素添加点 ...

  6. effective C++学习二(仅供个人学习记录,本文摘录effective C++)

    条款 2:尽量用<iostream>而不用<stdio.h> scanf 和 printf 很轻巧,很高效,你也早就知道怎么用它们,这我承 认.但尽管他们很有用,事实上 sca ...

  7. mybatis源码学习(二)--mybatis+spring源码学习

    这篇笔记主要来就,mybatis是如何利用spring的扩展点来实现和spring的整合 1.mybatis和spring整合之后,我们就不需要使用sqlSession.selectOne()这种方式 ...

  8. Springboot定时任务原理及如何动态创建定时任务

    一.前言 上周工作遇到了一个需求,同步多个省份销号数据,解绑微信粉丝.分省定时将销号数据放到SFTP服务器上,我需要开发定时任务去解析文件.因为是多省份,服务器.文件名规则.数据规则都不一定,所以要做 ...

  9. 普通web整合quartz跑定时任务

    一.场景(什么时候用到定时任务) 文件跑批,定时处理数据,和业务解耦的场景 二.目前都有哪些工具可以定时处理数据 1.jdk的timertask:数据量小的情况下,单线程的 2.kettle:比较适合 ...

随机推荐

  1. search--搜索引擎的使用笔记

    重度使用 完全匹配搜索 “”把搜索词放在双引号中 搜索不包含该词 减号- 常用的通配符 星号* 站内搜索site docker site:http://blog.daocloud.io/ 扩大范围搜索 ...

  2. [转] 你是as3老鸟吗?但是有些你可能目前都不知道的东西

    你是as3老鸟吗?如果以下内容对你有莫大的帮助,请顶下! 一:加载swf库中的图片 new 的过程就是图片解压缩的过程.处于 Class 状态时,图片占用的内存和 SWF 文件中这个图片占用的磁盘空间 ...

  3. 如何绑定android点击事件--跳转到另一个页面并实现关闭功能?

    一.点击按钮跳转到另一个页面. eg:实现从一个页面点击跳转到另一个页面 1.首先在一个布局文件(.XML)中绘画了一个跳转按钮(id为btn1): <Button         androi ...

  4. Intellij idea 设置svn 父目录文件显示状态颜色

    file-->setting-->version control

  5. cocos2d-x源码分析(1)

    class CC_DLL CCCopying { public: virtual CCObject* copyWithZone(CCZone* pZone); }; class CC_DLL CCZo ...

  6. java.lang.OutOfMemoryError: PermGen space及其解决方法(转载)

    java.lang.OutOfMemoryError: PermGen space及其解决方法 分类: java2007-09-11 12:34 162242人阅读 评论(51) 收藏 举报 gene ...

  7. 如何进行正确的SQL性能优化

    在SQL查询中,为了提高查询的效率,我们常常采取一些措施对查询语句进行SQL性能优化.本文我们总结了一些优化措施,接下来我们就一一介绍. 1.查询的模糊匹配 尽量避免在一个复杂查询里面使用 LIKE ...

  8. LXC docker

    docker的原理和特点可以参照百度百科 http://baike.baidu.com/view/11854949.htm 昨天听到光照说docker技术实现, 既然可以轻量虚拟,是否可以多个虚拟出分 ...

  9. POI 读取word (word 2003 和 word 2007) (转)

    最近在给客户做系统的时候,用户提出需求,要能够导入 word 文件,现在 microsoft word 有好几个版本 97.2003.2007的,这三个版本存储数据的格式上都有相当大的差别,而现在 9 ...

  10. decode 横竖转换 2

    select sno,nvl(to_char(sum(decode(cno,'c001',score))),'-') c001,nvl(to_char(sum(decode(cno,'c002',sc ...