Quartz--JAVA计划任务

Quartz是一个功能强大的java计划任务系统,它通过简单的配置和代码完成各种计划人数,定时单机应用到分布式的计算机间远程任务调度,都可以做到。
quartz是一个按照设定的时间规则来调度作业的调度器,比如可以设定每30s启动一个Job,但如果Job在30s内还未完成,那么quartz默认情况下还是按照设定的周期启动新的Job线程
今天刚看了一点资料,做一下笔记。
地址:[url]http://www.opensymphony.com/quartz/[/url]

例子:
      
import java.util.ArrayList;
import java.util.Date;

import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.Trigger;
import org.quartz.TriggerUtils;
import org.quartz.impl.StdSchedulerFactory;

public class TimerTest {

public static void main(String... strings) {
SchedulerFactory schedFact = new org.quartz.impl.StdSchedulerFactory();

Scheduler sched;
try {

// sched = schedFact.getScheduler();
sched = StdSchedulerFactory.getDefaultScheduler();

JobDetail jobDetail = new JobDetail("myJob", // job name
sched.DEFAULT_GROUP, // job group (you can also specify 'null' to
// use the default group)
TestJob.class); // the java class to execute

jobDetail.getJobDataMap().put("jobSays", "Hello World!");
jobDetail.getJobDataMap().put("myFloatValue", 3.141f);
jobDetail.getJobDataMap().put("myStateData", new ArrayList());

Trigger trigger = TriggerUtils.makeDailyTrigger(0, 1);
trigger.setStartTime(new Date());
trigger.setName("myTrigger");

//Add the given JobDetail to the Scheduler,
//and associate the given Trigger with it.
sched.scheduleJob(jobDetail, trigger); sched.start();
// sched.shutdown();

} catch (SchedulerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}



import java.util.ArrayList;
import java.util.Date;

import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

public class TestJob implements Job {

public void execute(JobExecutionContext context) throws JobExecutionException {
// TODO Auto-generated method stub
System.out.println("........................................");
String instName = context.getJobDetail().getName();
String instGroup = context.getJobDetail().getGroup();

JobDataMap dataMap = context.getJobDetail().getJobDataMap();

String jobSays = dataMap.getString("jobSays");
float myFloatValue = dataMap.getFloat("myFloatValue");
ArrayList state = (ArrayList) dataMap.get("myStateData");
state.add(new Date());

System.out.println("Instance " + instName + " of DumbJob says: " + jobSays);
}

}


运行结果如同[url]http://www.opensymphony.com/quartz/wikidocs/QuickStart.html[/url]所说的,显示了一堆红色的信息,说明程序读取了默认的Quartz配置,同时已经启动了。
[b][color=red]问题1[/color]:TestJob 中定义的一些输出信息怎么什么都没有呢,定义了1分钟,但是没有输出?[/b]
仔细看了例子代码,发现居然范了一个低级错误,使用了makeDailyTrigger,该方法是定时,每天几点几分进行计划任务,修改为
Trigger trigger = TriggerUtils.makeSecondlyTrigger(3);

之后没三秒钟就打印:
    ........................................
Instance myJob of DumbJob says: Hello World!

TriggerUtils内还有很多其他有用的方法,看[url=http://www.opensymphony.com/quartz/api/]quartz API[/url]

再增加一个JOB,只需要增加一个job类,jobDetail,Trigger两对象,调用scheduleJob方法就可以加入调度队列了。

这只是一个简单的例子,quartz还有很复杂的功能,继续学习。

[quote]参考:
[url=http://tech.ccidnet.com/art/1112/20051122/377733_1.html]quartz从入门到精通[/url]
[url=http://www.ibm.com/developerworks/cn/java/j-quartz/index.html]用 Quartz 进行作业调度[/url]
[/quote]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值