论坛首页 Java企业应用论坛

EJB3.1计划中的Cron

浏览 2841 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-02-14  
一个非常小的cron
Cron是一个Unix程序,允许你定时执行脚本(类似于DOS中的批处理文件),命令,
和其它程序在指定的日期和时间.不同于EJB定时器服务,cron考虑到弹性,以日
历为基础的计划安排.Cron工作可以预定间隔的执行,包括一个小时中指定的分
钟,天中的那几个小时,一周中的几天,一个月中的几天,和一年中的几个月.
举例来说,你可以安非一个Cron工作运行在每个星期五的下午12:15.或者每不时,
或者每个月的第一天.这样精细的划分听起来很复杂,不过叙述起来很容易.Cron
使用整型值的五个字段简单的文本格式.通过空格或制表符进行分隔,描述间隔
需要脚本的运行.
栏位的顺序很重要,因为,每一个指定不同的日历指示:分钟,小时,月,和一周中的
天.下面的例子表示如何安排cron工作:
20 * * * *---> 20 minutes after every hour. (00:20, 01:20, etc.)
5 22 * * *---> Every day at 10:05 p.m.
0 8 1 * *---> The first day of every month at 8:00 a.m.
0 8 4 7 *---> The fourth of July at 8:00 a.m.
15 12 * * 5---> Every Friday at 12:15 p.m.
下为译文:
20 * * * *---> 每小时的20分钟之后(00:20, 01:20, 等等.)
5 22 * * *---> 每天下午的10:05分
0 8 1 * *---> 每月第一天的上午8:00
0 8 4 7 *---> 七月第四天的上午8:00
15 12 * * 5---> 每周五的下午12:15
一个星号指出所有的数值是有效的. 举例来说,如果你使用一个星号作为分钟的
栏位, 你正在安排计划cron在每小时的那几分钟运行工作.你可以定义更复杂
的间隔通过指定多值,分开通过逗号,为一个栏位.除此之外, 你能叙述使用连字
号的时间的范围:
0 8 * * 1,3,5 --->Every Monday, Wednesday, and Friday at 8:00 a.m.
0 8 1,15 * * --->The first and 15th of every month at 8:00 a.m.
0 8-17 * * 1-5--->Every hour from 8:00 a.m. through 5:00 p.m., Mon-
Fri.
译文:
0 8 * * 1,3,5 --->每个周一,周三,和周五的上午8:00
0 8 1,15 * * --->每个月的第一和第十五天的上午8:00
0 8-17 * * 1-5--->周一到周五的每天上午8:00到下午的5:00
Cron 工作被预定使用crontab 文件,这是一个简单的文本文件,你可以配置日
期/时间字段和命令,一个常运行的脚本命令.
改良定时器
cron 日期/时间格式现在提供的更有弹性比EJB定时器. 定时器服务需要你指定
间隔精确到毫秒, 这有一点笨拙(你可以转换天,小时,和分钟到毫秒), 但是
更重要,它对许多真实的计划安排需要是不够弹性的. 举例来说,没有方法确定
一个定时器期满在每个月的第一或第十五天,或者在上午的8:00到下午的5:00中
的每个小时,周一到周五.你可以放置更复杂的间隔,但是要付出的代价是增加逻
辑到你的组件代码中来计算他们,并且在更复杂的情节中,你将会为相同的任务
设置多个定时器.
Cron 也不是完美的.计划安排工作像在一台录象机上设定一个定时器: 依照时
钟和日历,每件事物被预设.你能指定cron 在那年的特定天的特定时间运行一
个工作,但是你在来自一个任意的出发点的比较的间隔不能让它运行一个工作.
举例来说, cron 的日期/时间格式不让你排程一个工作每10 分钟运行,从现在
开始.你必须安排它在每小时的特定分钟运行(举例来
说,0,10,20,30,40,50).Cron 也被限制到回到工作的计划安排; 你不能建立一
个单一行动定时器,而且你不能设定一个开始日期.cron 和EJB 定时器服务的
问题是你不能规划, 一个停止约会一个定时器将会自动地取消它本身的日期.
你也可能已经注意cron 间隔心度是对分钟不愿对毫秒.起先一瞥, 这看起来像
弱点一样, 但是在习惯,它非容易接受.因为日历驱动的计划安排, 较多的精确
只是不是很有用.
如果它可以处理像cron 一样的日期/时间格式,藉由开始日期和结束日期,定时
器服务介接口将被改进.而非丢弃目前的createTimer()调用(它是有用的, 尤
其对于单一行动定时器和任意的毫秒间隔) ,它可能会较好的用像cron 一样的
语意增加一个新的方法.而非使用0-6 指定星期的天,使用数值
Sun,Mon,Tue,Wed,Thu,Fri,和Sat(如同在Linux版本下面的cron).例如,代码确
定一个定时器,它运行在2006年,从10月1日起每周的下午11:00.2007年也是如此:
TimerService timerService = ejbContext.getTimerService( );
Calendar start = Calendar.getInstance( ).set(2006, Calendar.OCTOBER,
1);
Calendar end = Calendar.getInstance( ).set(2007, Calendar.MAY, 31);
String dateTimeString = "23 * * * Mon-Fri";
timerService.createTimer(dateTimeString, start, end, null);
因为他们非常有用,所以对定时器服务的这个被提议的变化保存以毫秒为单位的
createTimer() 方法.像cron配置一样重要,不过它不是一个银的子弹.如果你想
要确定一个定时器每30秒启动(或者在任何的任意点及时)一次,你需要使用现有
createTimer() 方法之一.真正精确到毫秒很困难; 首先,正常处理和线程很容
易延迟响应时间,一个服务器时钟一定适当地与正确的时间(也就是, UTC) 一
起同步化
  • 到毫秒,可大部分不是.
  • 协调通用时间(UTC) 是国际的标准叁照时间. 服务器能与使用网络时间协
  • 定(NTP) 和公共时间服务器的UTC 一起协调. 被协调的全世界的时间在标准
    化国家之中被缩写如一个妥协的UTC . 一种完全的解释在
    http://www.boulder.nist.gov/timefreq/general/misc.htm#Anchor-14550上
    是由标准和技术的常见疑问的国立学会提供
       发表时间:2009-02-15  
    Quartz已经有这样的功能了
    0 请登录后投票
    论坛首页 Java企业应用版

    跳转论坛:
    Global site tag (gtag.js) - Google Analytics