JCronTab初步认识

来源:互联网 发布:qq邮箱stmp服务器端口 编辑:程序博客网 时间:2024/06/05 16:34

本编文章来自: http://www.ibm.com/developerworks/cn/java/j-lo-taskschedule/

Crontab 是一个非常方便的用于 unix/linux 系统的任务调度命令。JCronTab 则是一款完全按照 crontab 语法编写的 java 任务调度工具。
首先简单介绍一下 crontab 的语法,与上面介绍的 Quartz 非常相似,但更加简洁 , 集中了最常用的语法。主要由六个字段组成(括弧中标识了每个字段的取值范围):

 Minutes (0-59) Hours   (0-23)  Day-of-Month1-31) Month    (1-12/JAN-DEC)  Day-of-Week0-6/SUN-SAT) Command

与 Quartz 相比,省略了 Seconds 与 Year,多了一个 command 字段,即为将要被调度的命令。JCronTab 中也包含符号“*”与“/”, 其含义与 Quartz 相同。

每天 12 点到 15 点 , 每隔 1 小时执行一次 Date 命令:

0 12-15/1 * * * Date

每月 2 号凌晨 1 点发一封信给 zhjingbj@cn.ibm.com

 0 1 2 * * mail -s “good” zhjingbj@cn.ibm.com

每周一,周二,周三,周六的晚上 20:00 到 23:00,每半小时打印“normal”:

0/30 20-23 * * MON-WED,SAT echo “normal”

JCronTab 借鉴了 crontab 的语法,其区别在于 command 不再是 unix/linux 的命令,而是一个 Java 类。

“com.ibm.scheduler.JCronTask2#run”,则定期执行 run 方法;如果该类不带参数,则默认执行 main 方法。此外,还可以传参数给 main 方法或者构造函数,例如“com.ibm.scheduler.JCronTask2#run Hello World“表示传两个参数 Hello 和 World 给构造函数。

JCronTab 与 Quartz 相比,其优点在于,第一,支持多种任务调度的持久化方法,包括普通文件、数据库以及 XML 文件进行持久化;

二,JCronTab 能够非常方便地与 Web 应用服务器相结合,任务调度可以随 Web 应用服务器的启动自动启动;

第三,JCronTab 还内置了发邮件功能,可以将任务执行结果方便地发送给需要被通知的人。

JCronTab 与 Web 应用服务器的结合非常简单,只需要在 Web 应用程序的 web.xml 中添加如下行:

<servlet>    <servlet-name>LoadOnStartupServlet</servlet-name>    <servlet-class>org.jcrontab.web.loadCrontabServlet</servlet-class>    <init-param>  <param-name>PROPERTIES_FILE</param-name>  <param-value>D:/Scheduler/src/jcrontab.properties</param-value>    </init-param>    <load-on-startup>1</load-on-startup>  </servlet>  <!-- Mapping of the StartUp Servlet -->  <servlet-mapping>    <servlet-name>LoadOnStartupServlet</servlet-name>  <url-pattern>/Startup</url-pattern>  </servlet-mapping>

需要注意两点:第一,必须指定 servlet-class 为 org.jcrontab.web.loadCrontabServlet,因为它是整个任务调度的入口;第二,必须指定一个参数为 PROPERTIES_FILE,才能被 loadCrontabServlet 识别。

接下来,需要撰写 D:/Scheduler/src/jcrontab.properties 的内容,其内容根据需求的不同而改变。

当采用普通文件持久化时,jcrontab.properties 的内容主要包括:

org.jcrontab.data.file = D:/Scheduler/src/crontab  org.jcrontab.data.datasource = org.jcrontab.data.FileSource

其中数据来源 org.jcrontab.data.datasource 被描述为普通文件,即 org.jcrontab.data.FileSource。具体的文件即 org.jcrontab.data.file 指明为 D:/Scheduler/src/crontab。

Crontab 描述了任务的调度安排:

 */2 * * * * com.ibm.scheduler.JCronTask1  * * * * * com.ibm.scheduler.JCronTask2#run Hello World

其中包含了两条任务的调度,分别是每两分钟执行一次 JCronTask1 的 main 方法,每一分钟执行一次 JCronTask2 的 run 方法。

 package com.ibm.scheduler;import java.util.Date;public class JCronTask1 {    private static int count = 0;    public static void main(String[] args) {        System.out.println("--------------Task1-----------------");        System.out.println("Current Time = " + new Date() + ", Count = "                + count++);    }}package com.ibm.scheduler;import java.util.Date;public class JCronTask2 implements Runnable {    private static int count = 0;    private static String[] args;    public JCronTask2(String[] args) {        System.out.println("--------------Task2-----------------");        System.out.println("Current Time = " + new Date() + ", Count = "                + count++);        JCronTask2.args = args;    }    @Override    public void run() {        System.out.println("enter into run method");        if (args != null && args.length > 0) {            for (int i = 0; i < args.length; i++) {         System.out.print("This is arg " + i + " " + args[i] + "\n");            }        }    }}

到此为止,基于普通文件持久化的 JCronTab 的实例就全部配置好了。启动 Web 应用服务器,便可以看到任务调度的输出结果:

--------------Task2-----------------  Current Time = Tue Feb 15 09:22:00 CST 2011, Count = 0  enter into run method  This is arg 0 Hello  This is arg 1 World  --------------Task1-----------------  Current Time = Tue Feb 15 09:22:00 CST 2011, Count = 0  --------------Task2-----------------  Current Time = Tue Feb 15 09:23:00 CST 2011, Count = 1  enter into run method  This is arg 0 Hello  This is arg 1 World  --------------Task2-----------------  Current Time = Tue Feb 15 09:24:00 CST 2011, Count = 2  enter into run method  This is arg 0 Hello  This is arg 1 World  --------------Task1-----------------  Current Time = Tue Feb 15 09:24:00 CST 2011, Count = 1

通过修改 jcrontab.properties 中 datasource,可以选择采用数据库或 xml 文件持久化。
此外,JCronTab 还内置了发邮件功能,可以将任务执行结果方便地发送给需要被通知的人。其配置非常简单,只需要在 jcontab.properties 中添加几行配置即可:

 org.jcrontab.sendMail.to= Ther email you want to send to  org.jcrontab.sendMail.from=The email you want to send from  org.jcrontab.sendMail.smtp.host=smtp server  org.jcrontab.sendMail.smtp.user=smtp username  org.jcrontab.sendMail.smtp.password=smtp password
1 0
原创粉丝点击