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 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!