博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JCronTab 定时调用
阅读量:6856 次
发布时间:2019-06-26

本文共 2973 字,大约阅读时间需要 9 分钟。

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

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

Minutes (0-59) Hours   (0-23)  Day-of-Month (1-31) Month    (1-12/JAN-DEC)  Day-of-Week  (0-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 应用server相结合,任务调度能够随 Web 应用server的启动自己主动启动;第三,JCronTab 还内置了发邮件功能,能够将任务运行结果方便地发送给须要被通知的人。

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

LoadOnStartupServlet
org.jcrontab.web.loadCrontabServlet
PROPERTIES_FILE
D:/Scheduler/src/jcrontab.properties
1
LoadOnStartupServlet
/Startup

须要注意两点:第一,必须指定 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 描写叙述了任务的调度安排:

*/2 * * * * com.ibm.scheduler.JCronTask1  * * * * * 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

转载地址:http://zmjyl.baihongyu.com/

你可能感兴趣的文章
三星手机拍照,从图库选择照片旋转问题完美解决
查看>>
算法笔记_173:历届试题 斐波那契(Java)
查看>>
菜鸟版JAVA设计模式—外观模式
查看>>
EasyUI----动态拼接EasyUI控件
查看>>
PHP session 跨子域问题总结 ini_set('session.cookie_domain', ".domain.com")
查看>>
Office WPS如何在页眉页脚添加一条横线
查看>>
站在 Android 开发的角度,聊聊 Airbnb 的 Lottie!!!
查看>>
数组去重Demo引出的思考
查看>>
javascript怎么禁用浏览器后退按钮
查看>>
AtomicLong可以被原子地读取和写入的底层long值的操作
查看>>
Android studio 将 Module 打包成 Jar 包
查看>>
coffee script
查看>>
正则表达式大全
查看>>
SVN switch 用法详解
查看>>
Javascript文件下载顺序问题
查看>>
程序员第一定律:关于技能与收入
查看>>
网络通讯合并数据发送的重要性和实现原理
查看>>
Jquery getJSON 实现跨域请求 --- callback
查看>>
<转载>构造函数与拷贝构造函数
查看>>
[转]K近邻算法
查看>>