﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-努力创造未来！-随笔分类-quartz</title><link>http://www.blogjava.net/pdw2009/category/13199.html</link><description>本站不再更新，欢迎光临 
&lt;a href="http://php.11519.net/5jblog"&gt;java开发技术网&lt;/a&gt;</description><language>zh-cn</language><lastBuildDate>Sat, 10 Sep 2011 11:24:38 GMT</lastBuildDate><pubDate>Sat, 10 Sep 2011 11:24:38 GMT</pubDate><ttl>60</ttl><item><title>Spring中Quartz的配置 </title><link>http://www.blogjava.net/pdw2009/archive/2008/03/05/183947.html</link><dc:creator>有猫相伴的日子</dc:creator><author>有猫相伴的日子</author><pubDate>Wed, 05 Mar 2008 05:30:00 GMT</pubDate><guid>http://www.blogjava.net/pdw2009/archive/2008/03/05/183947.html</guid><wfw:comment>http://www.blogjava.net/pdw2009/comments/183947.html</wfw:comment><comments>http://www.blogjava.net/pdw2009/archive/2008/03/05/183947.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/pdw2009/comments/commentRss/183947.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/pdw2009/services/trackbacks/183947.html</trackback:ping><description><![CDATA[<h2><a id="AjaxHolder_ctl01_TitleUrl" href="http://www.cnblogs.com/kay/archive/2007/11/02/947372.html">Spring中Quartz的配置</a> </h2>
<div class="postText">Quartz是一个强大的企业级任务调度框架，Spring中继承并简化了Quartz，下面就看看在Spring中怎样配置Quartz：<br />首先我们来写一个被调度的类： 
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com.kay.quartz;<br /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;QuartzJob<br />{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;work()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Quartz的任务调度！！！</span><span style="color: #000000">"</span><span style="color: #000000">);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}</span></div>Spring的配置文件：<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">&lt;?</span><span style="color: #ff00ff">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"</span><span style="color: #0000ff">?&gt;</span><span style="color: #000000"><br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;!</span><span style="color: #ff00ff">DOCTYPE&nbsp;beans&nbsp;PUBLIC&nbsp;"-//SPRING//DTD&nbsp;BEAN//EN"&nbsp;"http://www.springframework.org/dtd/spring-beans.dtd"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">beans</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;要调用的工作类&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">bean&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="quartzJob"</span><span style="color: #ff0000">&nbsp;class</span><span style="color: #0000ff">="com.kay.quartz.QuartzJob"</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">bean</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;定义调用对象和调用对象的方法&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">bean&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="jobtask"</span><span style="color: #ff0000">&nbsp;class</span><span style="color: #0000ff">="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;调用的类&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="targetObject"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">ref&nbsp;</span><span style="color: #ff0000">bean</span><span style="color: #0000ff">="quartzJob"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">property</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;调用类中的方法&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="targetMethod"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">work</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">property</span><span style="color: #0000ff">&gt;<br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property name="concurrent" value="false" /&gt;&lt;!--&nbsp;单线程 --&gt;<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">bean</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;定义触发时间&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">bean&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="doTime"</span><span style="color: #ff0000">&nbsp;class</span><span style="color: #0000ff">="org.springframework.scheduling.quartz.CronTriggerBean"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="jobDetail"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">ref&nbsp;</span><span style="color: #ff0000">bean</span><span style="color: #0000ff">="jobtask"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">property</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;cron表达式&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="cronExpression"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">10,15,20,25,30,35,40,45,50,55&nbsp;*&nbsp;*&nbsp;*&nbsp;*&nbsp;?</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">property</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">bean</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;总管理类&nbsp;如果将lazy-init='false'那么容器启动就会执行调度程序&nbsp;&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">bean&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="startQuertz"</span><span style="color: #ff0000">&nbsp;lazy-init</span><span style="color: #0000ff">="false"</span><span style="color: #ff0000">&nbsp;autowire</span><span style="color: #0000ff">="no"</span><span style="color: #ff0000">&nbsp;class</span><span style="color: #0000ff">="org.springframework.scheduling.quartz.SchedulerFactoryBean"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="triggers"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">list</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">ref&nbsp;</span><span style="color: #ff0000">bean</span><span style="color: #0000ff">="doTime"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">list</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">property</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">bean</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">beans</span><span style="color: #0000ff">&gt;</span></div>测试程序：<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com.kay.quartz;<br /><br /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.springframework.context.ApplicationContext;<br /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.springframework.context.support.ClassPathXmlApplicationContext;<br /><br /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;MainTest<br />{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">/**</span><span style="color: #008000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@param</span><span style="color: #008000">&nbsp;args<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main(String[]&nbsp;args)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Test&nbsp;start<img alt="" src="http://www.cnblogs.com/Images/dot.gif" /><img alt="" src="http://www.cnblogs.com/Images/dot.gif" />.</span><span style="color: #000000">"</span><span style="color: #000000">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ApplicationContext&nbsp;context&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ClassPathXmlApplicationContext(</span><span style="color: #000000">"</span><span style="color: #000000">quartz-config.xml</span><span style="color: #000000">"</span><span style="color: #000000">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">如果配置文件中将startQuertz&nbsp;bean的lazy-init设置为false&nbsp;则不用实例化<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">context.getBean("startQuertz");</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.print(</span><span style="color: #000000">"</span><span style="color: #000000">Test&nbsp;end<img alt="" src="http://www.cnblogs.com/Images/dot.gif" />..</span><span style="color: #000000">"</span><span style="color: #000000">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />}</span></div>我们需要把log4j的配置文件放入src目录下，启动main类就可以了。<br /><br />关于cron表达式（来自网络）：<br />
<p>Cron 表达式包括以下 7 个字段：</p>
<ul><li>秒</li><li>分</li><li>小时</li><li>月内日期</li><li>月</li><li>周内日期</li><li>年（可选字段） </li></ul>
<p><a name="N1016E"><span class="smalltitle">特殊字符</span></a></p>
<p>Cron 触发器利用一系列特殊字符，如下所示：</p>
<ul><li>反斜线（/）字符表示增量值。例如，在秒字段中&#8220;5/15&#8221;代表从第 5 秒开始，每 15 秒一次。<br /><br /></li><li>问号（?）字符和字母 L 字符只有在月内日期和周内日期字段中可用。问号表示这个字段不包含具体值。所以，如果指定月内日期，可以在周内日期字段中插入&#8220;?&#8221;，表示周内日期值无关紧要。字母 L 字符是 <em>last</em> 的缩写。放在月内日期字段中，表示安排在当月最后一天执行。在周内日期字段中，如果&#8220;L&#8221;单独存在，就等于&#8220;7&#8221;，否则代表当月内周内日期的最后一个实例。所以&#8220;0L&#8221;表示安排在当月的最后一个星期日执行。<br /><br /></li><li>在月内日期字段中的字母（W）字符把执行安排在最靠近指定值的工作日。把&#8220;1W&#8221;放在月内日期字段中，表示把执行安排在当月的第一个工作日内。<br /><br /></li><li>井号（#）字符为给定月份指定具体的工作日实例。把&#8220;MON#2&#8221;放在周内日期字段中，表示把任务安排在当月的第二个星期一。<br /><br /></li><li>星号（*）字符是通配字符，表示该字段可以接受任何可能的值。 </li></ul>字段 允许值 允许的特殊字符 <br />秒 0-59 , - * / <br />分 0-59 , - * / <br />小时 0-23 , - * / <br />日期 1-31 , - * ? / L W C <br />月份 1-12 或者 JAN-DEC , - * / <br />星期 1-7 或者 SUN-SAT , - * ? / L C # <br />年（可选） 留空, 1970-2099 , - * / 
<p>表达式意义 <br />"0 0 12 * * ?" 每天中午12点触发 <br />"0 15 10 ? * *" 每天上午10:15触发 <br />"0 15 10 * * ?" 每天上午10:15触发 <br />"0 15 10 * * ? *" 每天上午10:15触发 <br />"0 15 10 * * ? 2005" 2005年的每天上午10:15触发 <br />"0 * 14 * * ?" 在每天下午2点到下午2:59期间的每1分钟触发 <br />"0 0/5 14 * * ?" 在每天下午2点到下午2:55期间的每5分钟触发 <br />"0 0/5 14,18 * * ?" 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发 <br />"0 0-5 14 * * ?" 在每天下午2点到下午2:05期间的每1分钟触发 <br />"0 10,44 14 ? 3 WED" 每年三月的星期三的下午2:10和2:44触发 <br />"0 15 10 ? * MON-FRI" 周一至周五的上午10:15触发 <br />"0 15 10 15 * ?" 每月15日上午10:15触发 <br />"0 15 10 L * ?" 每月最后一日的上午10:15触发 <br />"0 15 10 ? * 6L" 每月的最后一个星期五上午10:15触发 <br />"0 15 10 ? * 6L 2002-2005" 2002年至2005年的每月的最后一个星期五上午10:15触发 <br />"0 15 10 ? * 6#3" 每月的第三个星期五上午10:15触发 <br />每天早上6点 </p>
<p>0 6 * * * </p>
<p>每两个小时 </p>
<p>0 */2 * * * <br />晚上11点到早上8点之间每两个小时，早上八点 </p>
<p>0 23-7/2，8 * * * </p>
<p>每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点 </p>
<p>0 11 4 * 1-3 <br />1月1日早上4点 </p>
<p>0 4 1 1 *</p>更多知识：<br /><font face="Courier New">http://www.ibm.com/developerworks/cn/java/j-quartz/index.html</font><br /><font face="Courier New">http://www.javaeye.com/topic/117244</font><br /></div><img src ="http://www.blogjava.net/pdw2009/aggbug/183947.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/pdw2009/" target="_blank">有猫相伴的日子</a> 2008-03-05 13:30 <a href="http://www.blogjava.net/pdw2009/archive/2008/03/05/183947.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>QuartzWeb任务调度(转)</title><link>http://www.blogjava.net/pdw2009/archive/2006/08/03/61507.html</link><dc:creator>有猫相伴的日子</dc:creator><author>有猫相伴的日子</author><pubDate>Thu, 03 Aug 2006 06:19:00 GMT</pubDate><guid>http://www.blogjava.net/pdw2009/archive/2006/08/03/61507.html</guid><wfw:comment>http://www.blogjava.net/pdw2009/comments/61507.html</wfw:comment><comments>http://www.blogjava.net/pdw2009/archive/2006/08/03/61507.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/pdw2009/comments/commentRss/61507.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/pdw2009/services/trackbacks/61507.html</trackback:ping><description><![CDATA[在web应用中，大多数任务是以一种"防止用户长时间等待"的方式完成的。在Google搜索这样的例子中，减少等待时间对用户体验来说至关重要。异步任务的一种解决方案是在用户提交后生成一个线程（来处理异步任务），但这也不能解决那些需要以一定时间间隔重复运行任务、或在每天的指定时间运行任务的情况。<br /><br />　　让我们从一个数据库报表的例子来看看任务调度能如何帮助改善系统设计。报表可能是错综复杂的，这取决于用户所需数据的种类，以及是否需要从一个或多个数据库收集大量数据。用户可能需要很长时间来运行这样的"按需"报表。因此，我们向这个报表示例中添加任务调度机制，以便用户可以安排在任何他们需要的时间生成报表，并以PDF或其他格式在email中发送。用户可以让报表在每天的凌晨2:22，系统正处于低负荷时运行；也可以选择只在特定时间运行一次。通过在报表应用中加入任务调度，我们可以为产品添加一项有用的功能，并改善用户体验。<br /><br />　　幸运的是，有一个强大的开源解决方案可以让我们以标准的方式在web应用（或任何Java应用）中实施任务调度。以下示例展示了在web应用中，如何使用Quartz来创建一个任务调度框架。这个示例还使用了Struts Action framework 插件，以便在web应用启动时初始化任务调度机制。Struts是最常见的MVC框架，为大多数开发人员所熟悉。当然除此之外还有许多框架可以协助在web应用中实现MVC模式。<br /><br /><strong><span style="FONT-SIZE: 16px" twffan="done">　　启动时初始化任务调度器</span></strong><br /><br />　　我们首先要做的是建立一个Struts插件，让它在容器启动时创建我们的任务调度器。在以下例子中，我们选择Tomcat作为web应用容器，不过这些示例在其他容器中也应当可以运行。我们要创建一个Struts插件类，并在struts-config.xml中加入几行代码以使之可以工作。<br /><br />　　这个插件有两个可配置的初始化参数：startOnLoad指定是否要在容器启动时立即启动任务调度器，而 startupDelay指定启动任务调度器之前的等待时间。启动延时很有用，因为我们可能需要首先执行一些更重要的初始化步骤。此外还可以使用listener机制，以更复杂的方式来通知SchedulerPlugIn何时启动Quartz Scheduler。<br /><pre class="overflow">  &lt;plug-in className="SchedulerPlugIn"&gt;<br />     &lt;set-property property="startOnLoad" value="false" /&gt;<br />     &lt;set-property property="startupDelay" value="0" /&gt;<br />  &lt;/plug-in&gt;</pre><br /><br />　　我们要创建的是一个实现Struts插件接口org.apache.struts.action.PlugIn的单子类SchedulerPlugIn。Struts会按照配置文件中出现的顺序初始化各个插件。要特别注意的是init()方法中的代码，在此我们初始化了所需的Quartz对象，并得到Scheduler。我们的任务信息就要提交到此org.quartz.Scheduler对象，后者将在随后讨论。Scheduler对象由Quartz servlet根据其配置初始化，就像Struts初始化它的ActionServlet类一样。让我们来看init()方法：<br /><br /><pre class="overflow">public void init(ActionServlet actionServlet,<br />                 ModuleConfig moduleConfig) {<br /><br />  System.out.println("Initializing Scheduler PlugIn for Jobs!");<br />  // Retrieve the ServletContext<br />// 获取ServletContext<br />  ServletContext ctx = actionServlet.getServletContext();<br />  // The Quartz Scheduler<br />  // Quartz Scheduler对象<br />  Scheduler scheduler = null;<br /><br />  // Retrieve the factory from the ServletContext.<br />  // It will be put there by the Quartz Servlet<br />  // 从ServletContext取得由Quartz Servlet放置在此的factory对象。<br />  StdSchedulerFactory factory =  (StdSchedulerFactory) <br />      ctx.getAttribute(QuartzInitializerServlet.QUARTZ_FACTORY_KEY);<br />    <br />  try{<br />        // Retrieve the scheduler from the factory<br />        // 从factory取得scheduler<br />        scheduler = factory.getScheduler();<br /><br />        // Start the scheduler in case, it isn't started yet<br />        // 如果scheduler尚未启动，则启动它<br />        if (m_startOnLoad != null &amp;&amp; <br />            m_startOnLoad.equals(Boolean.TRUE.toString())){<br />            System.out.println("Scheduler Will start in " +<br />            m_startupDelayString + " milliseconds!");<br />            //wait the specified amount of time before<br />            // starting the process.<br />            // 在启动之前等待指定长度的时间<br />            Thread delayedScheduler =<br />                new Thread(new DelayedSchedulerStarted (<br />                                   scheduler, m_startupDelay));<br />            //give the scheduler a name. All good code needs a name<br />            //给任务调度器命名。好的代码总该有名字！<br />            delayedScheduler.setName("Delayed_Scheduler");<br />            //Start out scheduler<br />            //启动任务调度器<br />            delayedScheduler.start();<br />        }<br />  } catch (Exception e){<br />     e.printStackTrace();<br />  }<br />    sm_scheduler = scheduler;<br />}</pre><br /><br />　　配置过程的第二步是在web.xml中加入用来初始化Quartz servlet（org.quartz.ee.servlet.QuartzInitializerServlet）的内容，因为需要它将SchedulerFactory添加到ServletContext中，以便在我们的Struts插件中可以访问。SchedulerFactory就是我们在Struts插件中获得Scheduler对象的来源。除了struts-config.xml 和web.xml之外，还要在web应用的classes目录下放置一个quartz.properties文件。此文件的位置也可以在web.xml中作为QuartzInitializerServlet的启动参数来指定。<br /><br /><pre class="overflow">  &lt;servlet&gt;<br /><br />     &lt;servlet-name&gt;QuartzInitializer&lt;/servlet-name&gt;<br />     &lt;display-name&gt;Quartz Initializer Servlet&lt;/display-name&gt;<br /><br />  &lt;servlet-class&gt;<br />    org.quartz.ee.servlet.QuartzInitializerServlet<br />  &lt;/servlet-class&gt;<br />  &lt;load-on-startup&gt;1&lt;/load-on-startup&gt;<br />  &lt;init-param&gt;<br />    &lt;param-name&gt;shutdown-on-unload&lt;/param-name&gt;<br />    &lt;param-value&gt;true&lt;/param-value&gt;<br />  &lt;/init-param&gt;<br /><br />  &lt;init-param&gt;<br />    &lt;param-name&gt;start-scheduler-on-load&lt;/param-name&gt;<br />    &lt;param-value&gt;false&lt;/param-value&gt;<br />    &lt;/init-param&gt;<br /><br /> &lt;/servlet&gt;</pre><br /><br />　　这里其实完全可以不使用Struts和SchedulerPlugIn，但如果将来决定要以其它的任务调度框架替换Quartz的话，额外的抽象层就很有用了。长远看来，让一切保持松散耦合总会使工作变得容易些。如果你使用其它MVC框架，也可以用SchedulerPlugIn.init()方法中的代码达到同样的效果。此外，还可以用Servlet 2.3规范中的ServletContextListener来实现同样的初始化过程。<br /><br />　　此为止web应用已配置完毕，我们可以创建一个.war文件并部署到服务器上，从控制台观察SchedulerPlugIn的输出信息。然而在此之前，让我们先看看如何向任务调度器提交一项任务。<br /><br />　　我们可以从web应用中的任何类访问SchedulerPlugIn的唯一实例，并调度一些要执行的工作。首先需要一个Trigger（触发器）对象来告诉任务何时运行、每隔多久运行一次。Quartz支持多种触发器，在这个例子中我们使用CronTrigger。<br /><pre class="overflow">Trigger trigger = new CronTrigger("trigger1", "group1");<br />trigger.setCronExpression("0 0 15 ? * WED");</pre><br /><br />　　以上的触发器会在每周三的下午3点执行指定任务。现在我们只要创建一个JobDetail对象，并把它和上面的触发器一起传递给SchedulerPlugIn的scheduleWork()方法。<br /><pre class="overflow">    JobDetail jobDetail =<br />        new JobDetail("Hello World Job",<br />                      "Hello World Group",<br />                      HelloWorld.class,<br />                      true, true, true);    <br />//Schedule The work<br />//调度这项任务<br />    SchedulerPlugIn.scheduleWork(scheduledJobDetail, trigger);</pre><br /><br /><strong><span style="FONT-SIZE: 16px" twffan="done">　　实际工作在何处？</span></strong><br /><br />　　至此我们已决定Trigger，可以开始调度工作了。看上去一切都已完成，但实际上我们只是调度了一项任务，还有最重要的一步有待完成。注意HelloWorld.class作为参数传递给了JobDetail的构造函数。这个类就是实际完成工作的地方。HelloWorld继承了Quartz的Job类，并覆盖了execute()方法。当任务管理器决定运行这个任务时，execute()方法将被调用。来看代码：<br /><pre class="overflow">import org.quartz.JobDataMap;<br />import org.quartz.JobDetail;<br />import org.quartz.JobExecutionContext;<br /><br />//extend the proper Quartz class<br />//继承适当的Quartz类<br />public class HelloWorld extends Job {<br /><br />//override the execute method<br />//覆盖execute方法<br />    public void execute(JobExecutionContext context) {<br /><br />// Every job has it's own job detail<br />//每个Job都有独立的JobDetail<br />    JobDetail jobDetail = context.getJobDetail();<br />// The name is defined in the job definition<br />//name在Job定义中指定<br />    String jobName = jobDetail.getName();<br />//Every job has a Job Data map for storing extra information<br />//每个Job都有一个Job Data map来存放额外的信息<br />    JobDataMap dataMap = jobDetail.getJobDataMap();<br />       <br />       System.out.println("Hello World!!!");<br />   }<br /> }</pre><br /><br />　　出于测试的目的，你可能希望将触发器的频率调的高一点，以便观察到HelloWorld的动作。毕竟，你不想一直等到凌晨2点才能确定调度的任务确实运行了。相反，你可能需要一个每隔10秒运行的触发器：<br /><pre class="overflow">Trigger trigger = new SimpleTrigger("trigger1", "group1");<br />trigger.setRepeatCount(SimpleTrigger.REPEAT_INDEFINITELY);<br />trigger.setRepeatInterval(10000L); // milliseconds毫秒</pre><br /><br /><strong>　　注意</strong>，这个触发器没有使用类cron的语法。Quartz有大量各类的选项和配置方法，可适用于任何任务调度的需要。<br />        <br /><strong><span style="FONT-SIZE: 16px" twffan="done">　　其它计时方式的配置</span></strong><br /><br />　　Quartz提供了多种调度任务的方式。CronTrigger可能是最复杂的一种，不过还有其它的选择。大多数触发器可以由Quartz提供的TriggerUtils类创建。以下是一些常见的触发器的例子。如谚语所言，条条大路通罗马！<br />每天凌晨2:22触发的触发器<br />// 方法一：使用makeDailyTrigger<br /><pre class="overflow">Trigger trigger = TriggerUtils.makeDailyTrigger(2, 22);<br />trigger.setName("trigger1");<br />trigger.setGroup("group1");</pre><br /><br />// 方法二：使用CronTrigger<br /><pre class="overflow">Trigger trigger = new CronTrigger("trigger1", "group1");<br />trigger.setCronExpression("0 22 2 * * ?");</pre><br /><pre class="overflow"><br />每5秒执行一次的触发器<br />/*  * <br /> * 方法一：makeSecondlyTrigger<br /> * 注意以下代码将创建一个立即启动的触发器。要控制启动时间，使用<br /> * trigger.setStartTime(Date)方法。<br /> */<br />Trigger trigger = TriggerUtils.makeSecondlyTrigger(5);<br />trigger.setName("MyFiveSecondTrigger");<br />trigger.setGroup("MyTriggerGroup");</pre><br /><br /><pre class="overflow"> /* <br /> * <br /> * 方法二：设置SimpleTrigger的重复次数和间隔时间。<br /> * 注意以下代码将创建一个立即启动的触发器。要控制启动时间，使用<br /> * trigger.setStartTime(Date)方法。<br /> */<br />Trigger trigger = new SimpleTrigger("trigger1", "group1");<br />trigger.setRepeatCount(SimpleTrigger.REPEAT_INDEFINITELY);<br />trigger.setRepeatInterval(5000L); // milliseconds</pre><br /><br /><strong><span style="FONT-SIZE: 16px" twffan="done">　　按间隔时间运行任务</span></strong><br /><pre class="overflow">Trigger trigger = new SimpleTrigger("trigger1", "group1");<br />// 24 hours * 60(minutes per hour) *<br />// 60(seconds per minute) * 1000(milliseconds per second)<br />// 24小时 * 60（分钟每小时） * 60（秒每分钟）* 1000（毫秒每秒钟）<br />trigger.setRepeatInterval(24L * 60L * 60L * 1000L);</pre><br /><br /><strong>　　结论</strong><br />　　在这个演示中，我们只接触了Quartz框架的一些初级功能。记住，Java 5 和J2EE 5也有自己的任务调度机制，但是它们不像Quartz那样灵活易用。Quartz是目前唯一的开源Java任务调度框架，它的确为开发者的锦囊中增加了很有用的内容。你可从Open Symphony下载Quartz，并得到一份很好的教程和使用说明。  <img src ="http://www.blogjava.net/pdw2009/aggbug/61507.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/pdw2009/" target="_blank">有猫相伴的日子</a> 2006-08-03 14:19 <a href="http://www.blogjava.net/pdw2009/archive/2006/08/03/61507.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>CronTrigger 例子</title><link>http://www.blogjava.net/pdw2009/archive/2006/08/03/61495.html</link><dc:creator>有猫相伴的日子</dc:creator><author>有猫相伴的日子</author><pubDate>Thu, 03 Aug 2006 05:22:00 GMT</pubDate><guid>http://www.blogjava.net/pdw2009/archive/2006/08/03/61495.html</guid><wfw:comment>http://www.blogjava.net/pdw2009/comments/61495.html</wfw:comment><comments>http://www.blogjava.net/pdw2009/archive/2006/08/03/61495.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/pdw2009/comments/commentRss/61495.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/pdw2009/services/trackbacks/61495.html</trackback:ping><description><![CDATA[
		<h3>
				<a name="CronTriggersTutorial-Format">
				</a>Format</h3>
		<p>A cron expression is a string comprised of 6 or 7 fields separated by white space. Fields can contain any of the allowed values, along with various combinations of the allowed special characters for that field. The fields are as follows:</p>
		<table class="confluenceTable">
				<tbody>
						<tr>
								<th class="confluenceTh">Field Name</th>
								<th class="confluenceTh">Mandatory?</th>
								<th class="confluenceTh">Allowed Values</th>
								<th class="confluenceTh">Allowed Special Characters</th>
						</tr>
						<tr>
								<td class="confluenceTd">Seconds</td>
								<td class="confluenceTd">YES</td>
								<td class="confluenceTd">0-59</td>
								<td class="confluenceTd">, - * /</td>
						</tr>
						<tr>
								<td class="confluenceTd">Minutes</td>
								<td class="confluenceTd">YES</td>
								<td class="confluenceTd">0-59</td>
								<td class="confluenceTd">, - * /</td>
						</tr>
						<tr>
								<td class="confluenceTd">Hours</td>
								<td class="confluenceTd">YES</td>
								<td class="confluenceTd">0-23</td>
								<td class="confluenceTd">, - * /</td>
						</tr>
						<tr>
								<td class="confluenceTd">Day of month</td>
								<td class="confluenceTd">YES</td>
								<td class="confluenceTd">1-31</td>
								<td class="confluenceTd">, - * ? / L W C</td>
						</tr>
						<tr>
								<td class="confluenceTd">Month</td>
								<td class="confluenceTd">YES</td>
								<td class="confluenceTd">1-12 or JAN-DEC</td>
								<td class="confluenceTd">, - * /</td>
						</tr>
						<tr>
								<td class="confluenceTd">Day of week</td>
								<td class="confluenceTd">YES</td>
								<td class="confluenceTd">1-7 or SUN-SAT</td>
								<td class="confluenceTd">, - * ? / L C #</td>
						</tr>
						<tr>
								<td class="confluenceTd">Year</td>
								<td class="confluenceTd">NO</td>
								<td class="confluenceTd">empty, 1970-2099</td>
								<td class="confluenceTd">, - * /</td>
						</tr>
				</tbody>
		</table>
		<p>So cron expressions can be as simple as this: <tt>* * * * ? *</tt><br />or more complex, like this: <tt>0 0/5 14,18,3-39,52 ? JAN,MAR,SEP MON-FRI 2002-2010</tt></p>
		<h3>
				<a name="CronTriggersTutorial-Specialcharacters">
				</a>Special characters</h3>
		<ul>
				<li>
						<b>
								<tt>*</tt>
						</b> (<em>"all values"</em>) - used to select all values within a field. For example, "*" in the minute field means <em>"every minute"</em>. </li>
		</ul>
		<ul>
				<li>
						<b>
								<tt>?</tt>
						</b> (<em>"no specific value"</em>) - useful when you need to specify something in one of the two fields in which the character is allowed, but not the other. For example, if I want my trigger to fire on a particular day of the month (say, the 10th), but don't care what day of the week that happens to be, I would put "10" in the day-of-month field, and "?" in the day-of-week field. See the examples below for clarification. </li>
		</ul>
		<ul>
				<li>
						<b>
								<tt>-</tt>
						</b> - used to specify ranges. For example, "10-12" in the hour field means <em>"the hours 10, 11 and 12"</em>. </li>
		</ul>
		<ul>
				<li>
						<b>
								<tt>,</tt>
						</b> - used to specify additional values. For example, "MON,WED,FRI" in the day-of-week field means <em>"the days Monday, Wednesday, and Friday"</em>. </li>
		</ul>
		<ul>
				<li>
						<b>
								<tt>/</tt>
						</b> - used to specify increments. For example, "0/15" in the seconds field means <em>"the seconds 0, 15, 30, and 45"</em>. And "5/15" in the seconds field means <em>"the seconds 5, 20, 35, and 50"</em>. You can also specify '/' after the '*' character - in this case '*' is equivalent to having '0' before the '/'. '1/3' in the day-of-month field means <em>"fire every 3 days starting on the first day of the month"</em>. </li>
		</ul>
		<ul>
				<li>
						<b>
								<tt>L</tt>
						</b> (<em>"last"</em>) - has different meaning in each of the two fields in which it is allowed. For example, the value "L" in the day-of-month field means <em>"the last day of the month"</em> - day 31 for January, day 28 for February on non-leap years. If used in the day-of-week field by itself, it simply means "7" or "SAT". But if used in the day-of-week field after another value, it means <em>"the last xxx day of the month"</em> - for example "6L" means <em>"the last friday of the month"</em>. When using the 'L' option, it is important not to specify lists, or ranges of values, as you'll get confusing results. </li>
		</ul>
		<ul>
				<li>
						<b>
								<tt>W</tt>
						</b> (<em>"weekday"</em>) - used to specify the weekday (Monday-Friday) nearest the given day. As an example, if you were to specify "15W" as the value for the day-of-month field, the meaning is: <em>"the nearest weekday to the 15th of the month"</em>. So if the 15th is a Saturday, the trigger will fire on Friday the 14th. If the 15th is a Sunday, the trigger will fire on Monday the 16th. If the 15th is a Tuesday, then it will fire on Tuesday the 15th. However if you specify "1W" as the value for day-of-month, and the 1st is a Saturday, the trigger will fire on Monday the 3rd, as it will not 'jump' over the boundary of a month's days. The 'W' character can only be specified when the day-of-month is a single day, not a range or list of days. </li>
		</ul>
		<table class="tipMacro" cellspacing="8" cellpadding="5" width="85%" align="center" border="0">
				<colgroup>
						<col width="24" />
						<col />
				</colgroup>
				<tbody>
						<tr>
								<td valign="top">
										<img height="16" alt="" src="file:///C:/images/icons/emoticons/check.gif" width="16" align="absMiddle" border="0" />
								</td>
								<td>
										<p>The 'L' and 'W' characters can also be combined in the day-of-month field to yield 'LW', which translates to <em>"last weekday of the month"</em>.</p>
								</td>
						</tr>
				</tbody>
		</table>
		<ul>
				<li>
						<b>
								<tt>#</tt>
						</b> - used to specify "the nth" XXX day of the month. For example, the value of "6#3" in the day-of-week field means <em>"the third Friday of the month"</em> (day 6 = Friday and "#3" = the 3rd one in the month). Other examples: "2#1" = the first Monday of the month and "4#5" = the fifth Wednesday of the month. Note that if you specify "#5" and there is not 5 of the given day-of-week in the month, then no firing will occur that month. </li>
		</ul>
		<ul>
				<li>
						<b>
								<tt>C</tt>
						</b> (<em>"calendar"</em>) - this means values are calculated against the associated calendar, if any. If no calendar is associated, then it is equivalent to having an all-inclusive calendar. A value of "5C" in the day-of-month field means <em>"the first day included by the calendar on or after the 5th"</em>. A value of "1C" in the day-of-week field means <em>"the first day included by the calendar on or after Sunday"</em>. </li>
		</ul>
		<table class="infoMacro" cellspacing="8" cellpadding="5" width="85%" align="center" border="0">
				<colgroup>
						<col width="24" />
						<col />
				</colgroup>
				<tbody>
						<tr>
								<td valign="top">
										<img height="16" alt="" src="file:///C:/images/icons/emoticons/information.gif" width="16" align="absMiddle" border="0" />
								</td>
								<td>
										<p>The legal characters and the names of months and days of the week are not case sensitive. <tt>MON</tt> is the same as <tt>mon</tt>.</p>
								</td>
						</tr>
				</tbody>
		</table>
		<h3>
				<a name="CronTriggersTutorial-Examples">
				</a>Examples</h3>
		<p>Here are some full examples:</p>
		<table class="confluenceTable">
				<tbody>
						<tr>
								<th class="confluenceTh">Expression</th>
								<th class="confluenceTh">Meaning</th>
						</tr>
						<tr>
								<td class="confluenceTd">
										<tt>0 0 12 * * ?</tt>
								</td>
								<td class="confluenceTd">Fire at 12pm (noon) every day</td>
						</tr>
						<tr>
								<td class="confluenceTd">
										<tt>0 15 10 ? * *</tt>
								</td>
								<td class="confluenceTd">Fire at 10:15am every day</td>
						</tr>
						<tr>
								<td class="confluenceTd">
										<tt>0 15 10 * * ?</tt>
								</td>
								<td class="confluenceTd">Fire at 10:15am every day</td>
						</tr>
						<tr>
								<td class="confluenceTd">
										<tt>0 15 10 * * ? *</tt>
								</td>
								<td class="confluenceTd">Fire at 10:15am every day</td>
						</tr>
						<tr>
								<td class="confluenceTd">
										<tt>0 15 10 * * ? 2005</tt>
								</td>
								<td class="confluenceTd">Fire at 10:15am every day during the year 2005</td>
						</tr>
						<tr>
								<td class="confluenceTd">
										<tt>0 * 14 * * ?</tt>
								</td>
								<td class="confluenceTd">Fire every minute starting at 2pm and ending at 2:59pm, every day</td>
						</tr>
						<tr>
								<td class="confluenceTd">
										<tt>0 0/5 14 * * ?</tt>
								</td>
								<td class="confluenceTd">Fire every 5 minutes starting at 2pm and ending at 2:55pm, every day</td>
						</tr>
						<tr>
								<td class="confluenceTd">
										<tt>0 0/5 14,18 * * ?</tt>
								</td>
								<td class="confluenceTd">Fire every 5 minutes starting at 2pm and ending at 2:55pm, AND fire every 5 minutes starting at 6pm and ending at 6:55pm, every day</td>
						</tr>
						<tr>
								<td class="confluenceTd">
										<tt>0 0-5 14 * * ?</tt>
								</td>
								<td class="confluenceTd">Fire every minute starting at 2pm and ending at 2:05pm, every day</td>
						</tr>
						<tr>
								<td class="confluenceTd">
										<tt>0 10,44 14 ? 3 WED</tt>
								</td>
								<td class="confluenceTd">Fire at 2:10pm and at 2:44pm every Wednesday in the month of March.</td>
						</tr>
						<tr>
								<td class="confluenceTd">
										<tt>0 15 10 ? * MON-FRI</tt>
								</td>
								<td class="confluenceTd">Fire at 10:15am every Monday, Tuesday, Wednesday, Thursday and Friday</td>
						</tr>
						<tr>
								<td class="confluenceTd">
										<tt>0 15 10 15 * ?</tt>
								</td>
								<td class="confluenceTd">Fire at 10:15am on the 15th day of every month</td>
						</tr>
						<tr>
								<td class="confluenceTd">
										<tt>0 15 10 L * ?</tt>
								</td>
								<td class="confluenceTd">Fire at 10:15am on the last day of every month</td>
						</tr>
						<tr>
								<td class="confluenceTd">
										<tt>0 15 10 ? * 6L</tt>
								</td>
								<td class="confluenceTd">Fire at 10:15am on the last Friday of every month</td>
						</tr>
						<tr>
								<td class="confluenceTd">
										<tt>0 15 10 ? * 6L</tt>
								</td>
								<td class="confluenceTd">Fire at 10:15am on the last Friday of every month</td>
						</tr>
						<tr>
								<td class="confluenceTd">
										<tt>0 15 10 ? * 6L 2002-2005</tt>
								</td>
								<td class="confluenceTd">Fire at 10:15am on every last friday of every month during the years 2002, 2003, 2004 and 2005</td>
						</tr>
						<tr>
								<td class="confluenceTd">
										<tt>0 15 10 ? * 6#3</tt>
								</td>
								<td class="confluenceTd">Fire at 10:15am on the third Friday of every month</td>
						</tr>
						<tr>
								<td class="confluenceTd">
										<tt>0 0 12 1/5 * ?</tt>
								</td>
								<td class="confluenceTd">Fire at 12pm (noon) every 5 days every month, starting on the first day of the month.</td>
						</tr>
						<tr>
								<td class="confluenceTd">
										<tt>0 11 11 11 11 ?</tt>
								</td>
								<td class="confluenceTd">Fire every November 11th at 11:11am.</td>
						</tr>
				</tbody>
		</table>
		<table class="warningMacro" cellspacing="8" cellpadding="5" width="85%" align="center" border="0">
				<colgroup>
						<col width="24" />
						<col />
				</colgroup>
				<tbody>
						<tr>
								<td valign="top">
										<img height="16" alt="" src="file:///C:/images/icons/emoticons/forbidden.gif" width="16" align="absMiddle" border="0" />
								</td>
								<td>
										<p>Pay attention to the effects of '?' and '*' in the day-of-week and day-of-month fields!</p>
								</td>
						</tr>
				</tbody>
		</table>
<img src ="http://www.blogjava.net/pdw2009/aggbug/61495.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/pdw2009/" target="_blank">有猫相伴的日子</a> 2006-08-03 13:22 <a href="http://www.blogjava.net/pdw2009/archive/2006/08/03/61495.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个非常简单的quartz例子</title><link>http://www.blogjava.net/pdw2009/archive/2006/07/18/58747.html</link><dc:creator>有猫相伴的日子</dc:creator><author>有猫相伴的日子</author><pubDate>Tue, 18 Jul 2006 06:38:00 GMT</pubDate><guid>http://www.blogjava.net/pdw2009/archive/2006/07/18/58747.html</guid><wfw:comment>http://www.blogjava.net/pdw2009/comments/58747.html</wfw:comment><comments>http://www.blogjava.net/pdw2009/archive/2006/07/18/58747.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/pdw2009/comments/commentRss/58747.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/pdw2009/services/trackbacks/58747.html</trackback:ping><description><![CDATA[
		<p>在quartz中一个作业实例必须实现org.quartz.Job接口<br />如:<br /><br />package com.unicom.gdnum.jobs;</p>
		<p>import java.util.*;</p>
		<p>import org.apache.commons.logging.*;<br />import org.quartz.Job;<br />import org.quartz.JobExecutionContext;<br />import org.quartz.JobExecutionException;</p>
		<p>public class HelloworldJob implements Job{<br /> <br /> static Log log=LogFactory.getLog(HelloworldJob.class);<br /> public  HelloworldJob() {<br />  <br /> }<br /> public void execute(JobExecutionContext arg0) throws JobExecutionException {<br />  // TODO Auto-generated method stub<br />  log.info("Hello World Quartz......."+(new Date()).toLocaleString());<br /> }<br />}<br /><br /><br />quartz有自己的配置文个名为quartz.properties，如果我们不在src/（根目录）如果我们不建立文件那么quartz就会使用quartz.jar包里的这个的文件。该文件通常包含以下内容：<br /><br />#<br /># Configure Main Scheduler Properties <br />#</p>
		<p>org.quartz.scheduler.instanceName = TestScheduler<br />org.quartz.scheduler.instanceId = AUTO</p>
		<p>#<br /># Configure ThreadPool <br />#</p>
		<p>org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool<br />org.quartz.threadPool.threadCount =  5<br />org.quartz.threadPool.threadPriority = 4</p>
		<p>#<br /># Configure JobStore <br />#</p>
		<p>org.quartz.jobStore.misfireThreshold = 5000</p>
		<p>org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore</p>
		<p># ===========================================================================<br /># Configure SchedulerPlugins  ===============================================<br /># ===========================================================================<br />org.quartz.plugin.triggHistory.class = org.quartz.plugins.history.LoggingTriggerHistoryPlugin<br />org.quartz.plugin.triggHistory.triggerFiredMessage = Trigger {1}.{0} fired job {6}.{5} at: {4, date, HH:mm:ss MM/dd/yyyy}<br />org.quartz.plugin.triggHistory.triggerCompleteMessage = Trigger {1}.{0} completed firing job {6}.{5} at {4, date, HH:mm:ss MM/dd/yyyy} with resulting trigger instruction code: {9}</p>
		<p>org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.JobInitializationPlugin<br />org.quartz.plugin.jobInitializer.fileName = /quartz_job.xml<br />org.quartz.plugin.jobInitializer.overWriteExistingJobs = false<br />org.quartz.plugin.jobInitializer.failOnFileNotFound = true</p>
		<p>org.quartz.plugin.shutdownhook.class = org.quartz.plugins.management.ShutdownHookPlugin<br />org.quartz.plugin.shutdownhook.cleanShutdown = true</p>
		<p>以上配置quartz所需的配置，其中org.quartz.plugin.jobInitializer.fileName = /quartz_job.xml指定作业配置文件名，下面我是为HelloworldJob 写的一个配置，quartz_job.xml内容如下：<br />&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />&lt;quartz&gt;<br />  &lt;job&gt;<br />    &lt;job-detail&gt;<br />      &lt;name&gt;helloworld&lt;/name&gt;<br />      &lt;group&gt;group1&lt;/group&gt;<br />      &lt;job-class&gt;com.unicom.gdnum.jobs.HelloworldJob&lt;/job-class&gt;<br />    &lt;/job-detail&gt;<br />    &lt;trigger&gt;<br />      &lt;cron&gt;<br />        &lt;name&gt;test&lt;/name&gt;<br />        &lt;group&gt;group1&lt;/group&gt;<br />        &lt;job-name&gt;helloworld&lt;/job-name&gt;<br />        &lt;job-group&gt;group1&lt;/job-group&gt;<br />        &lt;cron-expression&gt;0 0/1 * * * ?&lt;/cron-expression&gt;<br />     &lt;/cron&gt;<br />    &lt;/trigger&gt;<br />  &lt;/job&gt;<br />&lt;/quartz&gt;<br /><br />这是在tomcat中作的一个例子，当然要使用quartz面要下载其相关包!<br /></p>
<img src ="http://www.blogjava.net/pdw2009/aggbug/58747.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/pdw2009/" target="_blank">有猫相伴的日子</a> 2006-07-18 14:38 <a href="http://www.blogjava.net/pdw2009/archive/2006/07/18/58747.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>