习惯使用 unix/linux 的开发者应该对 crontab 都不陌生。Crontab 是一个很方便的用于 unix/linux 系统的任务调度命令。JCronTab 则是一款全然依照 crontab 语法编写的 java 任务调度工具。

首先简介一下 crontab 的语法,与上面介绍的 Quartz 很相似,但更加简洁 , 集中了最经常使用的语法。主要由六个字段组成(括弧中标识了每一个字段的取值范围):

  1. Minutes 0-59
  2. Hours 0-23
  3. Day-of-Month 1-31
  4. Month 1-12/JAN-DEC
  5. Day-of-Week 0-6/SUN-SAT
  6. Command

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

举比例如以下:

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

  1. 0 12-15/1 * * * Date

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

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

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

  1. 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 应用server相结合,任务调度能够随 Web 应用server的启动自己主动启动;第三,JCronTab 还内置了发邮件功能,能够将任务运行结果方便地发送给须要被通知的人。

JCronTab 与 Web 应用server的结合很easy,仅仅须要在 Web 应用程序的 web.xml 中加入例如以下行:

  1. <servlet>
  2. <servlet-name>LoadOnStartupServlet</servlet-name>
  3. <servlet-class>org.jcrontab.web.loadCrontabServlet</servlet-class>
  4. <init-param>
  5. <param-name>PROPERTIES_FILE</param-name>
  6. <param-value>D:/Scheduler/src/jcrontab.properties</param-value>
  7. </init-param>
  8. <load-on-startup>1</load-on-startup>
  9. </servlet>
  10. <!-- Mapping of the StartUp Servlet -->
  11. <servlet-mapping>
  12. <servlet-name>LoadOnStartupServlet</servlet-name>
  13. <url-pattern>/Startup</url-pattern>
  14. </servlet-mapping>

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

接下来,须要撰写 jcrontab.properties
的内容,其内容依据需求的不同而改变。

org.jcrontab.data.file=/Users/meHao/Documents/qinian/WebRoot/WEB-INF/classes/crontab
//这个路径为绝对路径

org.jcrontab.data.datasource=org.jcrontab.data.FileSource

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

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

第一个为调用了JCronTask1的main方法,第二个是JCRONJask2的run方法

JCronTask1.java

public class JCronTask1 {

private static int count = 0;

public static void main(String[] args) {

System.out.println("Task1Current Time = " + new Date().toLocaleString() + ", Count = "+ count++);

}

}

JCroTask2.java

public class JCronTask2 implements
Runnable {

private static int count = 0;

private static String[] args;



public JCronTask2(String[] args) {

System.out.println("Task2: Current Time = " + new Date().toLocaleString() + ", 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");

}

}

}

}

以上,配置就基本结束了,接下来就是调试一下。

Task1Current Time = 2014-10-8 14:49:00, Count = 1

Task1Current Time = 2014-10-8 14:50:00, Count = 2

Task2: Current Time = 2014-10-8 14:50:00, Count = 1

enter into run method:

This is arg 0 Hello

This is arg 1 World

JCronTab 定时调用的更多相关文章

  1. Spring结合Quartz实现多任务定时调用(转载)

    Quartz框架提供了丰富的任务调度支持,比如,在 何时执行何种任务,它是一个开源的由OpenSymphony维护的项目,开发者能够在Java EE,或单独的Java SE应用中使用它.无论是简单的任 ...

  2. Quartz结合SPRING多任务定时调用

    定义两个被调度的类 public class QuartzJob { public void work() { System.out.println(Spring Quartz的任务调度1被调用!&q ...

  3. java Timer(定时调用、实现固定时间执行)

    最近需要用到定时调用的功能.可以通过java的Timer类来进行定时调用,下面是有关Timer的一些相关知识. 其实就Timer来讲就是一个调度器,而TimerTask呢只是一个实现了run方法的一个 ...

  4. ASP.NET定时调用WebService 运行后台代码

    效果: 通过在网站的Global.asax的Application_Start方法中 加入定时器 定时调用WebService 该WebService的一个方法 负责在后台 向数据库的某个表加入数据 ...

  5. js实现定时调用的函数setInterval()

    setInterval是一个实现定时调用的函数,可按照指定的周期(以毫秒计)来调用函数或计算表达式.setInterval方法会不停地调用函数,直到 clearInterval被调用或窗口被关闭 定义 ...

  6. C#使用windows服务定时调用api接口

    使用VS创建windows服务项目: 创建好项目  会出现一个设计界面 右键弹出对话框 选择添加安装程序 名字什么的自己可以改: 项目目录: 打开项目中的ProjectInstaller.Design ...

  7. MySql创建存储过程,并使用事件定时调用

    一.使用命令行创建存储过程的步骤 :参数详情参考 https://www.mysqlzh.com/ 1.模板  delimiter $$ # 设置分隔符为 '$$' ,mysql默认的语句分隔符为 ' ...

  8. springMVC、httpClient调用别人提供的接口!!!(外加定时调用)

    import com.ibm.db.util.AppConfig; import com.ibm.db.util.JacksonUitl; import org.apache.http.HttpEnt ...

  9. oracle中job定时调用存储过程的实例

    使用job模拟定时从元数据表中抽取指定数据进入目标表的过程. 一.创建元数据表 --create table test_origianl create table test_original_data ...

随机推荐

  1. nmap 使用注意事项

    1.可行的网络主机的高速发现 nmap -sP 192.168.1.*  要么 nmap -sP 192.168.1.-254 2.扫描UDPport DP扫描方式用于推断UDPport的情况. 向目 ...

  2. hdu 3911 Black And White(线段树)

    题目连接:hdu 3911 Black And White 题目大意:给定一个序列,然后有M次操作: 0 l r:表示询问l,r中最大连续1的个数 1 l r:表示将l,r区间上的数取反 解题思路:线 ...

  3. 有一个很大的整数list,需要求这个list中所有整数的和,写一个可以充分利用多核CPU的代码,来计算结果(转)

    引用 前几天在网上看到一个淘宝的面试题:有一个很大的整数list,需要求这个list中所有整数的和,写一个可以充分利用多核CPU的代码,来计算结果.一:分析题目 从题中可以看到“很大的List”以及“ ...

  4. zoj2977Strange Billboard (国家压缩+罗列)

    Strange Billboard Time Limit: 2 Seconds Memory Limit: 65536 KB The marketing and public-relations de ...

  5. hdu2844 &amp; poj1742 Coin ---多重背包--两种方法

    意甲冠军:你有N种硬币,每个价格值A[i],每个号码C[i],要求. 在不超过M如果是,我们用这些硬币,有多少种付款的情况下,.那是,:1,2,3,4,5,....,M这么多的情况下,,你可以用你的硬 ...

  6. JavaScript的类型、值和变量的总结

    前言:JavaScript的数据类型分为两类:原始类型和对象类型.5种原始类型:数字.字符串.布尔值.null(空).undefined(未定义).对象是属性的集合,每个属性都由“名/值对”(值可以是 ...

  7. JavaScript语言核心之词法结构

    编程语言的词法结构是一套基础性规则,用来描述如何使用这门语言来编写程序.作为语法的基础,它规定了诸如变量名是什么样的.怎么写注释,以及程序语句之间如何分割的等规则. 1.1字符集 JavaScript ...

  8. spring框架内置笔记本

    ◆基本介绍 目的:解决企业应用开发的复杂性 特征:使用主JavaBean更换EJB,它提供了许多其他的企业应用 范围:随你Java应用 Spring 框架是一个分层架构.由 7 个定义良好的模块组成. ...

  9. iBatis多表查询

    <typeAlias alias="Product" type="com.shopping.entity.Product"/> <typeAl ...

  10. 十天学Linux内核之第一天---内核探索工具类

    原文:十天学Linux内核之第一天---内核探索工具类 寒假闲下来了,可以尽情的做自己喜欢的事情,专心待在实验室里燥起来了,因为大二的时候接触过Linux,只是关于内核方面确实是不好懂,所以十天的时间 ...