Quartz使用示例總結
任務調度在目前的JAVA應用程序中運用的十分普遍,故掌握QUARTZ是必備的技能
閑話少說,上官網:http://www.quartz-scheduler.org/ 下載最新1.80資源包
commons-logging log4j sff4j 等jar包要添加進去,quartz的jar包則肯定必須
首先寫一個類實現Job接口
public class QuartzDemo implements Job{
@Override
public void execute(JobExecutionContext arg0) throws JobExecutionException {
System.out.println("執行我.......");
}
} </pre><pre class="brush:java; toolbar: true; auto-links: false;"> public class Test {
private static final SimpleTrigger CronTrigger = null;
public static void main(String[] args){
}
public void test1(){
//通過SchedulerFactory來獲取一個調度器
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
Scheduler scheduler;
try {
scheduler = schedulerFactory.getScheduler();
//引進作業程序
JobDetail jobDetail =
new JobDetail("jobDetail-s1", "jobDetailGroup-s1", QuartzDemo.class);
//new一個觸發器
SimpleTrigger simpleTrigger =
new SimpleTrigger("simpleTrigger", "triggerGroup-s1");
//設置作業啟動時間
long ctime = System.currentTimeMillis();
simpleTrigger.setStartTime(new Date(ctime));
//設置作業執行間隔
simpleTrigger.setRepeatInterval(1000);
//設置作業執行次數
simpleTrigger.setRepeatCount(10);
//設置作業執行優先級默認為5
//simpleTrigger.setPriority(10);
//作業和觸發器設置到調度器中
scheduler.scheduleJob(jobDetail, simpleTrigger);
//啟動調度器
scheduler.start();
} catch (SchedulerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void test2(){
try {
SchedulerFactory schedFact = new org.quartz.impl.StdSchedulerFactory();
Scheduler sched = schedFact.getScheduler();
sched.start();
JobDetail jobDetail = new JobDetail( " Income Report " ,
" Report Generation " , QuartzDemo.class );
jobDetail.getJobDataMap().put( " type " , " FULL " );
CronTrigger trigger = new CronTrigger( " Income Report " ,
" Report Generation " );
/**/ /* 每1分鐘執行一次 */
trigger.setCronExpression( "0 33 16 * * ?" );
sched.scheduleJob(jobDetail, trigger);
} catch (Exception e) {
e.printStackTrace();
}
}
public void test3(){
//通過SchedulerFactory來獲取一個調度器
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
Scheduler scheduler;
try {
scheduler = schedulerFactory.getScheduler();
//引進作業程序
JobDetail jobDetail =
new JobDetail("jobDetail-s1", "jobDetailGroup-s1", QuartzDemo.class);
//new一個觸發器
CronTrigger simpleTrigger =
new CronTrigger("trigger", "group", "job", "group", "16 26/1 8-17 * * ?");
// new SimpleTrigger("simpleTrigger", "triggerGroup-s1");
//設置作業啟動時間
//Calendar excelCal = Calendar.getInstance();
//excelCal.add(Calendar.DAY_OF_MONTH, 1);
///excelCal.set(Calendar.HOUR_OF_DAY, 16);
//excelCal.set(Calendar.SECOND, 0);
//excelCal.add(Calendar.MINUTE, 9);
// long ctime = System.currentTimeMillis();
// simpleTrigger.setStartTime(excelCal.getTime());
//設置作業執行間隔
// simpleTrigger.setRepeatInterval(1000);
//設置作業執行次數
// simpleTrigger.setRepeatCount(10);
//設置作業執行優先級默認為5
//simpleTrigger.setPriority(10);
//作業和觸發器設置到調度器中
scheduler.scheduleJob(jobDetail, simpleTrigger);
//啟動調度器
scheduler.start();
} catch (SchedulerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} </pre><br />
需要注意的幾點是經常會出現org.quartz.core.ErrorLogger : An error occured instantiating job to be executed.....這種異常,解決辦法是
1)Job類必須有默認的無參構造方法,當然不覆蓋的話類本身就是無參的構造方法
2)Job的scope必須是Public類型的,因為quartz根據反射機制實例化類,如果不是public的,無法對其暴露
3) Job類不能是內部類,原因同上,所以最好單獨建類 </pre><br />
后附加上我網上搜集的
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!