來源于網絡 http://www.blogjava.net/xiaodaoxiaodao/articles/103437.html 給出完整的類和配置檔案,除了一般是Spring 包外,另外需要下一個包spring-context-1.15.jar包,可在http://repo1.maven.org/maven2/ 找。 下面的内容拼到一個webProject裡面,釋出起來就可以看到效果。 1.Action public class ScheduleInfoAction { public void reScheduleJob() throws SchedulerException, ParseException { // 運作時可通過動态注入的scheduler得到trigger CronTriggerBean trigger = (CronTriggerBean) scheduler.getTrigger( "cronTrigger", Scheduler.DEFAULT_GROUP); String dbCronExpression = getCronExpressionFromDB(); String originConExpression = trigger.getCronExpression(); // 判斷從DB中取得的任務時間(dbCronExpression)和現在的quartz線程中的任務時間(originConExpression)是否相等 // 如果相等,則表示使用者并沒有重新設定資料庫中的任務時間,這種情況不需要重新rescheduleJob if(!originConExpression.equalsIgnoreCase(dbCronExpression)){ trigger.setCronExpression(dbCronExpression); //執行更新操作 scheduler.rescheduleJob("cronTrigger", Scheduler.DEFAULT_GROUP, trigger); } // 下面是具體的job内容,可自行設定 executeJobDetail(); } private String getCronExpressionFromDB(){ String sql="from ScheduleInfo scheduleInfo where 1=1 "; sql=sql+" and scheduleInfo.infoId = '"+"1" + "'"; List scheduleList = scheduleInfoManager.queryScheduleInListBySql(sql); ScheduleInfo scheduleInfo = (ScheduleInfo)scheduleList.get(0); String dbCronExpression = scheduleInfo.getCronExpression(); return dbCronExpression; } private void executeJobDetail(){ System.out.println("schedule action time:"+System.currentTimeMillis()); } private Scheduler scheduler; // 設值注入,通過setter方法傳入被調用者的執行個體scheduler public void setScheduler(Scheduler scheduler) { this.scheduler = scheduler; } private ScheduleInfoManager scheduleInfoManager; // 設值注入,通過setter方法傳入被調用者的執行個體scheduleInfoManager public void setScheduleInfoManager(ScheduleInfoManager scheduleInfoManager){ this.scheduleInfoManager = scheduleInfoManager; } } 2.Bean public class ScheduleInfo { String cronExpression="0/10 * * * * ?"; public void setCronExpression(String cronExpression) { this.cronExpression = cronExpression; } public String getCronExpression(){ return this.cronExpression ; } } 3.Service public class ScheduleInfoManager { long i =System.currentTimeMillis(); int j=0; List lis=new ArrayList(); ScheduleInfo s=new ScheduleInfo(); public List queryScheduleInListBySql(String sql){ if(System.currentTimeMillis()-i<30*1000 ){ }else if(j==0){ j++; s.setCronExpression("0 * * * * ?"); System.out.println("30秒到,更新參數:0 * * * * ?"); } lis.add(s); return lis; } } 4.Init public class InitializingCronTrigger extends CronTriggerBean implements Serializable { private ScheduleInfoManager scheduleInfoManager; // 設值注入,通過setter方法傳入被調用者的執行個體scheduleInfoManager public void setScheduleInfoManager(ScheduleInfoManager scheduleInfoManager){ this.scheduleInfoManager = scheduleInfoManager; // 因為在getCronExpressionFromDB使用到了scheduleInfoManager,是以 // 必須上一行代碼設定scheduleInfoManager後進行getCronExpressionFromDB String cronExpression = getCronExpressionFromDB (); // ① // 因為extendsCronTriggerBean ,此處調用父類方法初始化cronExpression try { setCronExpression (cronExpression); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } // ② } private String getCronExpressionFromDB(){ String sql="from ScheduleInfo scheduleInfo where 1=1 "; sql=sql+" and scheduleInfo.infoId = '"+"1" + "'"; List scheduleList = scheduleInfoManager.queryScheduleInListBySql(sql); ScheduleInfo scheduleInfo = (ScheduleInfo)scheduleList.get(0); String dbCronExpression = scheduleInfo.getCronExpression(); System.out.println("inital:"+dbCronExpression); return dbCronExpression; } 5.applicationcontext.xml