分享
 
 
 

Jcrontab - java定时程序进阶学习

王朝java/jsp·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

初学Jcrontab感觉非常好,用它来做一个定时程序非常轻易,而且方便。有关Jcrontab的介绍和它的定时文件的格式,在前面的那篇文章已经介绍过了,这里再来讲解一下它在程序中的具体应用。在这里,我们先约定数据源这个概念,“数据源”(我暂且这样称呼),它主要是用来由Jcrontab按照定时规则要处理的类和程序,这可以是多个,也可以是一个,我按照Jcrontab提供的方法通常是将它写到文件中,XML文件或数据库中。这样,按照Jcrontab的规则,提供给Jcrontab这些数据源就可以使用Jcrotab的定时功能了。

根据Jcrontab存储的不同的数据源,我们可以分成以下几个:

普通文件来存储

数据库存储

XML文件存储

在程序中也可以添加要执行的数据源,比如执行本地的应用程序等。下面分别介绍一下。在这之前,先介绍一下有关Jcrontab用到的配置文件:

jcrontab.properties配置文件,这是用来启动Jcrontab的必需文件。在Jcrontab的发布包中已经有一个完整格式的jcrontab.properties文件了,里面有它的样例,我们只需要根据我们自己的应用需要,来使用具体的配置属性,来构造自己的jcrontab.properties。

还有一个配置文件就是我们自己的定时配置文件。(若我们采用的数据源是文件的话,就需要这个了)这个文件是用来写负责处理定时程序的,里面按照规定好的时间来处理规定好的类或类的方法。

若我们采用数据库存储数据源的话,那么,我们就需要配置一个数据库的信息,在jcrontab.properties文件中已经有一个例子了,我们可以改成我们需要的数据库配置信息,这个很轻易。

若要采用的是XML形式的文件,那么我们要指定数据源是XML的,同时指定处理XML的解析器,这里用的是Apache的Xerces。

在程序中随时可以添加数据源,通过Crontab中的newTask方法,就可以随时添加。

通过文件记录数据源

下面通过例子,我们来讲解一个具体的Jcrontab程序,看它是如何定时处理程序的。

运行程序的JCrontabApp类: JCrontabApp类 import org.jcrontab.Crontab;

import org.jcrontab.NativeExec;

import org.jcrontab.SendMail;

import org.jcrontab.data.CrontabParser;

import org.jcrontab.data.CrontabEntryBean;

import org.jcrontab.data.CrontabEntryDAO;

import Java.io.File;

public class JCrontabApp {

private static Crontab cron = null;

private String JcrontabFile = null;

public JCrontabApp() {

}

public String getJcrontabFile() {

return JcrontabFile;

}

public void setJcrontabFile(String jcrontabFile) {

JcrontabFile = jcrontabFile;

}

/**

* 初始化Jcrontab,通过指定的jcrontab.properties来执行具体的操作

* 启动Jcrontab

*/

protected void init() {

cron = Crontab.getInstance();

try {

ShutdownHook();

cron.setDaemon(false);

if (null == JcrontabFile)

cron.init();

cron.init(JcrontabFile);

System.out.println("Start Jcrontab...");

} catch (java.lang.Exception e) {

e.printStackTrace();

}

}

/**

* 关闭Jcrontab的执行

* @throws Exception

*/

protected void ShutdownHook() throws Exception {

Runtime.getRuntime().addShutdownHook(new Thread() {

public void run() {

System.out.println("Shutting down...");

cron.uninit(200);

System.out.println("Stoped Jcrontab!");

}

});

}

/**

* 判定是否是Holiday

* @return

* @throws Exception

*/

public boolean isHoliday()throws Exception{

return cron.isHoliday();

}

/**

* 根据不同的参数执行不同的定时程序,可选参数可从main方法中查看

* @param args

* @throws Exception

*/

public void exectue(String[] args) throws Exception {

if (args.length < 2) {

return;

}

this.setJcrontabFile(args[0]);

init();

if ("database".equals(args[1]))

executeDatabase();

else if ("appliction".equals(args[1])) {

String[] parameters = new String[args.length-2];

System.arraycopy(args,2,parameters,0,args.length-2);

cron.newTask("org.jcrontab.NativeExec","main",parameters);

} else if ("javamail".equals(args[1]))

executeJavaMail(args[2]);

}

/**

* 执行数据库的操作

* @throws Exception

*/

protected void executeDatabase() throws Exception {

CrontabParser cp = new CrontabParser();

CrontabEntryBean[] ceb = new CrontabEntryBean[2];

ceb[0] = cp.marshall("* * * * * com.aweb.test.NumTest 123");

ceb[0].setYears("*");

ceb[0].setSeconds("0");

ceb[0].setBusinessDays(true);

ceb[0].setId(0);

ceb[1] = cp.marshall("* * * * * com.aweb.test.LetterTest 234");

ceb[1].setYears("*");

ceb[1].setSeconds("0");

ceb[1].setBusinessDays(true);

ceb[1].setId(1);

CrontabEntryDAO.getInstance().store(ceb);

}

/**

* 执行本地的应用程序的操作

* @param parameters

*/

protected void executeAppliction(String[] parameters) {

NativeExec.main(parameters);

}

/**

* 将执行的文件发送为email

* @param sendFilename

* @throws Exception

*/

protected void executeJavaMail(String sendFilename) throws Exception {

File sendFile = new File(sendFilename);

SendMail sm = new SendMail();

sm.send(sendFile);

}

/**

* 主要通过main方法来实现Jcrontab的实现

* @param args

* @throws Exception

*/

public static void main(String args[]) throws Exception {

if (args.length < 2) {

System.out.println("Usage:The values of args:<-type>[]");

System.out.println("********************************************************");

System.out.println("Optional Parameters of type:");

System.out.println("-filedata:doing file operating.");

System.out.println("-database:doing database operating.");

System.out.println("-appliction :doing native application execute.");

System.out.println("-javamail :doing javamail operating.");

System.out.println("********************************************************");

System.exit(1);

}

JCrontabApp jp = new JCrontabApp();

jp.exectue(args);

System.out.println(jp.isHoliday());

}

}

Photoshop入门教程

Photoshop实例教程

Photoshop

cs教程

滤镜

鼠绘

Photoshop照片处理

Photoshop视频教程

Photoshop作品展示

特效

抠图

带测试运行的NumTest类和LetterTest类:

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有