JCronTab 定时调用
习惯使用 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 中加入例如以下行:
<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 识别。
接下来,须要撰写 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
JCronTab 定时调用的更多相关文章
- Spring结合Quartz实现多任务定时调用(转载)
Quartz框架提供了丰富的任务调度支持,比如,在 何时执行何种任务,它是一个开源的由OpenSymphony维护的项目,开发者能够在Java EE,或单独的Java SE应用中使用它.无论是简单的任 ...
- Quartz结合SPRING多任务定时调用
定义两个被调度的类 public class QuartzJob { public void work() { System.out.println(Spring Quartz的任务调度1被调用!&q ...
- java Timer(定时调用、实现固定时间执行)
最近需要用到定时调用的功能.可以通过java的Timer类来进行定时调用,下面是有关Timer的一些相关知识. 其实就Timer来讲就是一个调度器,而TimerTask呢只是一个实现了run方法的一个 ...
- ASP.NET定时调用WebService 运行后台代码
效果: 通过在网站的Global.asax的Application_Start方法中 加入定时器 定时调用WebService 该WebService的一个方法 负责在后台 向数据库的某个表加入数据 ...
- js实现定时调用的函数setInterval()
setInterval是一个实现定时调用的函数,可按照指定的周期(以毫秒计)来调用函数或计算表达式.setInterval方法会不停地调用函数,直到 clearInterval被调用或窗口被关闭 定义 ...
- C#使用windows服务定时调用api接口
使用VS创建windows服务项目: 创建好项目 会出现一个设计界面 右键弹出对话框 选择添加安装程序 名字什么的自己可以改: 项目目录: 打开项目中的ProjectInstaller.Design ...
- MySql创建存储过程,并使用事件定时调用
一.使用命令行创建存储过程的步骤 :参数详情参考 https://www.mysqlzh.com/ 1.模板 delimiter $$ # 设置分隔符为 '$$' ,mysql默认的语句分隔符为 ' ...
- springMVC、httpClient调用别人提供的接口!!!(外加定时调用)
import com.ibm.db.util.AppConfig; import com.ibm.db.util.JacksonUitl; import org.apache.http.HttpEnt ...
- oracle中job定时调用存储过程的实例
使用job模拟定时从元数据表中抽取指定数据进入目标表的过程. 一.创建元数据表 --create table test_origianl create table test_original_data ...
随机推荐
- (DDD)仓储的思考
(DDD)仓储的思考 为什么需要仓储呢?领域对象(一般是聚合根)的被创建出来后的到最后持久化到数据库都需要跟数据库打交道,这样我们就需要一个类似数据库访问层的东西来管理领域对象.那是不是我们就可以设计 ...
- SQL开发中容易忽视的一些小地方(二)
原文:SQL开发中容易忽视的一些小地方(二) 目的:继上一篇:SQL开发中容易忽视的一些小地方(一) 总结SQL中的null用法后,本文我将说说表联接查询. 为了说明问题,我创建了两个表,分别是学生信 ...
- BZOJ 1009 HNOI2008 GT考试 KMP算法+矩阵乘法
标题效果:给定的长度m数字字符串s.求不包括子s长度n数字串的数目 n<=10^9 看这个O(n)它与 我们不认为这 令f[i][j]长度i号码的最后的字符串j位和s前者j数字匹配方案 例如,当 ...
- Android发展Singleton模式
这是什么Singleton模式?它是Java23之间的一种模式,在Android发展也有着广泛的应用,例Calander类别,当对象是由未创建 new Calander而是Calander.getIn ...
- java+js实现完整的图片展示本地目录demo
java+js实现完整的图片展示本地目录demo 最近的项目满足需要,实现通过一个前端button点击事件,流行音乐浏览下的全部图片: 思路: - 获取到所需展示图片的本地目录内全部图片的文件绝对路径 ...
- 《TCP/IP具体解释》读书笔记(18章)-TCP连接的建立与中止
TCP是一个面向连接的协议.不管哪一方向还有一方发送数据之前.都必须在两方之间建立一条连接.这样的两端间连接的建立与无连接协议UDP不同.UDP向还有一端发送数据报时,无需不论什么预告的握手. 1.建 ...
- The Swift Programming Language中国完整版
近来的ios的swift语言似乎火了.我没有objectc基金会,但在此之前有c随着java在...的基础上.从几天开始学习ios的swift语言,晚发表在博客形式.下面是英文版本翻译swif图书.还 ...
- Linux内核导出符号宏定义EXPORT_SYMBOL源代码分析
资源: <include/linux/moudule.h> --. #ifndef MODULE_SYMBOL_PREFIX #define MODULE_SYMBOL_PREFIX &q ...
- TinyMCE实现简单的本地上传
TinyMCE这个东西很多地方再用,不过我以前一直没用过,最近才接触,因为有一套现成的metro风格的皮肤,仅此而已,不过最终如何调用还是我得来实现.其他的都好说,网上的资料一大把一大把的,唯独这个本 ...
- zoj 3203 Light Bulb,三分之二的基本问题
Light Bulb Time Limit: 1 Second Memory Limit: 32768 KB Compared to wildleopard's wealthiness, h ...