﻿<?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-EJB,J2EE失乐园-随笔分类-原创文章</title><link>http://www.blogjava.net/zhoubikui/category/6352.html</link><description>轻量级j2ee开发设计开发探讨</description><language>zh-cn</language><lastBuildDate>Fri, 02 Mar 2007 03:13:38 GMT</lastBuildDate><pubDate>Fri, 02 Mar 2007 03:13:38 GMT</pubDate><ttl>60</ttl><item><title>在Java中实现Job Scheduling</title><link>http://www.blogjava.net/zhoubikui/archive/2005/12/26/25466.html</link><dc:creator>EJB,J2EE失乐园</dc:creator><author>EJB,J2EE失乐园</author><pubDate>Mon, 26 Dec 2005 09:18:00 GMT</pubDate><guid>http://www.blogjava.net/zhoubikui/archive/2005/12/26/25466.html</guid><wfw:comment>http://www.blogjava.net/zhoubikui/comments/25466.html</wfw:comment><comments>http://www.blogjava.net/zhoubikui/archive/2005/12/26/25466.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhoubikui/comments/commentRss/25466.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhoubikui/services/trackbacks/25466.html</trackback:ping><description><![CDATA[在大多数项目中，在特定的时间或频率下你需要完成一些特定的任务。在本文中我们将演示如何用标准的Java Timer API来实现。<BR>
<P>大多商业应用都会用报表和统计，很难想象没有这些帮助我们分析未来趋势的数据，我们还要这系统干什么。问题是如此多的数据我们该如何触发，如果处理对系统性能影响不大。比较好的方式是避开应用高峰，让服务器在闲暇时完成这些事。</P>
<P>下面是我的程序：</P><PRE><FONT size=+0><FONT color=#003366>package net.nighttale.scheduling;<BR></FONT></FONT></PRE><PRE><FONT size=+0><FONT color=#003366>&nbsp;<BR></FONT></FONT></PRE>/**<BR>&nbsp;* <STRONG>@author</STRONG> kevin zhou<BR>&nbsp;*<BR>&nbsp;* 在Java中实现Job Scheduling<BR>&nbsp;* 创建日期 2004-7-13<BR>&nbsp;*/<BR><STRONG>import</STRONG> java.util.TimerTask;<BR><STRONG>import</STRONG> java.util.Calendar;<BR><STRONG>import</STRONG> java.util.Date;<BR><STRONG>import</STRONG> java.util.Timer;<BR>&nbsp;<BR><STRONG>public</STRONG> <STRONG>class</STRONG> ReportGenerator <STRONG>extends</STRONG> TimerTask{<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp; /* （非 Javadoc）<BR>&nbsp;&nbsp;&nbsp; &nbsp;* @see java.util.TimerTask#run()<BR>&nbsp;&nbsp;&nbsp; &nbsp;*/<BR>&nbsp;&nbsp;&nbsp; <STRONG>public</STRONG> <STRONG>void</STRONG> run() {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("Generating report");<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;<BR>}<BR><STRONG>class</STRONG> MainApplication {<BR>&nbsp;<BR>&nbsp; <STRONG>public</STRONG> <STRONG>static</STRONG> <STRONG>void</STRONG> main(String[] args) {<BR>&nbsp;&nbsp;&nbsp; Timer timer=<STRONG>new</STRONG> Timer();<BR>&nbsp;&nbsp;&nbsp; Calendar date = Calendar.getInstance();<BR>&nbsp;&nbsp;&nbsp; date.set(<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Calendar.DAY_OF_WEEK,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Calendar.SUNDAY<BR>&nbsp;&nbsp;&nbsp; );<BR>&nbsp;&nbsp;&nbsp; date.set(Calendar.HOUR, 0);<BR>&nbsp;&nbsp;&nbsp; date.set(Calendar.MINUTE, 0);<BR>&nbsp;&nbsp;&nbsp; date.set(Calendar.SECOND, 0);<BR>&nbsp;&nbsp;&nbsp; date.set(Calendar.MILLISECOND, 0);<BR>&nbsp;&nbsp;&nbsp; // Schedule to run every Sunday in midnight<BR>&nbsp;&nbsp;&nbsp; timer.schedule(<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <STRONG>new</STRONG> ReportGenerator(),<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; date.getTime(),<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1000 * 60 * 60 * 24 * 7<BR>&nbsp;&nbsp;&nbsp; );<BR>&nbsp; }<BR>}<BR>我先简单解释一下，在我们的例子中ReportGenerator继承java.util.TimerTask，它又继承了java.lang.Runnable，我们需要覆盖run()方法。<BR>调用时我们用schedule()方法让它每周日0点0分执行，避开服务器高峰，实现Job Scheduling的目的。<img src ="http://www.blogjava.net/zhoubikui/aggbug/25466.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhoubikui/" target="_blank">EJB,J2EE失乐园</a> 2005-12-26 17:18 <a href="http://www.blogjava.net/zhoubikui/archive/2005/12/26/25466.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>