一,quratz比較詳細的教程:http://www.blogjava.net/Unmi/archive/2008/08/24 /223926.html。還可以直接下載教程,很全面。jar包下載地址:http://www.opensymphony.com/quartz/ 。
二,需要快速開發一個簡單的任務調度,請看下面:
參考資料:http://callan.iteye.com/blog/160139
常常会在Web应用中需要启动一个自己写的服务,比如说刷新主页,统计数据等,下面提供一种简单的方式.
(一)作業類:
通過實現 org.quartz.job 接口 , 覆盖了 execute(JobExecutionContext context) 方法。
这个方法可以包含我们想要执行的任何代码。
----------------------------------------------------------------------------------------------------------------------------------
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class CoinJob implements Job{
public CoinJob(){
}
public void execute(JobExecutionContext arg0) throws JobExecutionException {
System.out.println("MyJob----" + new Date()); //這個方法裡面寫入你想要執行的內容
}
}
----------------------------------------------------------------------------------------------------------------------------------
(二)編寫quartz.properties文件:
這個文件的默認名稱是quartz.properties。如果在項目啟動的時候,Quartz沒有在工程中找到該文件,則會從自己的jar包讀取其默認的quartz.properties文件。
quartz.properties
#---------调度器属性----------------
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
属性的介绍
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.properties中“org.quartz.plugin.jobInitializer.fileName = quartz_job.xml”的 quartz_job.xml文件,如下:
----------------------------------------------------------------------------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<quartz>
<job>
<job-detail>
<name>coinJob</name> // job名
<group>job</group> // job組
<job-class>com.top.scheduler.CoinJob</job-class> //實現類
</job-detail>
<trigger>
<cron>
<name>t1</name>
<group>job</group>
<job-name>coinJob</job-name> //該觸發器trigger對應的job名
<job-group>job</job-group> //該觸發器trigger對應的job組
<cron-expression>0/30 * * * * ?</cron-expression> //每隔30秒出發一次
</cron>
</trigger>
</job>
</quartz>
----------------------------------------------------------------------------------------------------------------------------------
<cron-expression>0/20 * * * * ?</cron-expression>
Quartz的Cron 表达式包括以下 7 个字段:秒 分 小时 月内日期 月 周内日期 年(可选字段)
意思是:从0秒开始计算,安排任务每 30秒执行一次。
(三)修改配置web.xml
----------------------------------------------------------------------------------------------------------------------------------
<servlet>
<servlet-name>quartz</servlet-name>
<servlet-class>
org.quartz.ee.servlet.QuartzInitializerServlet
</servlet-class>
<init-param>
<param-name>config-file</param-name>
<param-value>/quartz.properties</param-value>
</init-param>
<init-param>
<param-name>shutdown-on-unload</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>start-scheduler-on-load</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- 或者監聽器也可以
<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>
<listener>
<listener-class>
org.quartz.ee.servlet.QuartzInitializerListener
</listener-class>
</listener>
-->
----------------------------------------------------------------------------------------------------------------------------------