#調度標識名 集羣中每個實例都必須使用相同的名稱 org.quartz.scheduler.instanceName:scheduler #ID設置爲自動獲取 每個必須不一樣 org.quartz.scheduler.instanceId :AUTO #數據保存方式爲持久化 org.quartz.jobStore.class :org.quartz.impl.jdbcjobstore.JobStoreTX #數據庫平臺 org.quartz.jobStore.driverDelegateClass:org.quartz.impl.jdbcjobstore.oracle.weblogic.WebLogicOracleDelegate#數據庫別名 隨便取org.quartz.jobStore.dataSource : myXADS #表的前綴 org.quartz.jobStore.tablePrefix : QRTZ_ #設置爲TRUE不會出現序列化非字符串類到 BLOB 時產生的類版本問題org.quartz.jobStore.useProperties : true #加入集羣 org.quartz.jobStore.isClustered : true #調度實例失效的檢查時間間隔 org.quartz.jobStore.clusterCheckinInterval:20000 #允許的最大做業延長時間 org.quartz.jobStore.misfireThreshold :60000 #ThreadPool 實現的類名 org.quartz.threadPool.class:org.quartz.simpl.SimpleThreadPool #線程數量 org.quartz.threadPool.threadCount : 10 #線程優先級 org.quartz.threadPool.threadPriority : 5 #自建立父線程org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread: true #設置數據源org.quartz.dataSource.myXADS.jndiURL: CT #jbdi類名 org.quartz.dataSource.myXADS.java.naming.factory.initial :weblogic.jndi.WLInitialContextFactory#URLorg.quartz.dataSource.myXADS.java.naming.provider.url:=t3://localhost:7001 【注】:在J2EE工程中若是想用數據庫管理Quartz的相關信息,就必定要配置數據源,這是Quartz的要求。
定時任務的增,刪該,查java
package com.tianyu.jty.system.service; import java.util.ArrayList; import java.util.List; import java.util.Set; import org.apache.log4j.Logger; import org.quartz.CronScheduleBuilder; import org.quartz.CronTrigger; import org.quartz.JobBuilder; import org.quartz.JobDetail; import org.quartz.JobExecutionContext; import org.quartz.JobKey; import org.quartz.Scheduler; import org.quartz.SchedulerException; import org.quartz.SimpleTrigger; import org.quartz.Trigger; import org.quartz.TriggerBuilder; import org.quartz.TriggerKey; import org.quartz.impl.matchers.GroupMatcher; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.tianyu.jty.system.entity.ScheduleJob; /** * 定時任務 service * @author ty * @date 2015年1月13日 */ @Service public class ScheduleJobService{ private static final Logger log = Logger.getLogger(ScheduleJobService.class); @Autowired private Scheduler scheduler; /** * 添加定時任務 * @param ScheduleJob */ public void add(ScheduleJob scheduleJob){ @SuppressWarnings("rawtypes") Class job = null; try { job = Class.forName(scheduleJob.getClassName()); } catch (ClassNotFoundException e1) { log.error("任務類沒找到"); e1.printStackTrace(); } @SuppressWarnings("unchecked") JobDetail jobDetail = JobBuilder.newJob(job).withIdentity(scheduleJob.getName(), scheduleJob.getGroup()).build(); jobDetail.getJobDataMap().put("scheduleJob", scheduleJob); //表達式調度構建器(可判斷建立SimpleScheduleBuilder) CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(scheduleJob.getCronExpression()); //按新的cronExpression表達式構建一個新的trigger CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity(scheduleJob.getName(), scheduleJob.getGroup()).withSchedule(scheduleBuilder).build(); try { scheduler.scheduleJob(jobDetail, trigger); log.info("定時任務添加成功"); } catch (SchedulerException e) { e.printStackTrace(); } } /** * 獲取全部JobDetail * @return 結果集合 */ public List<JobDetail> getJobs() { try { GroupMatcher<JobKey> matcher = GroupMatcher.anyJobGroup(); Set<JobKey> jobKeys = scheduler.getJobKeys(matcher); List<JobDetail> jobDetails = new ArrayList<JobDetail>(); for (JobKey key : jobKeys) { jobDetails.add(scheduler.getJobDetail(key)); } return jobDetails; } catch (SchedulerException e) { e.printStackTrace(); } return null; } /** * 獲取全部計劃中的任務 * @return 結果集合 */ public List<ScheduleJob> getAllScheduleJob(){ List<ScheduleJob> scheduleJobList=new ArrayList<ScheduleJob>(); GroupMatcher<JobKey> matcher = GroupMatcher.anyJobGroup(); try { Set<JobKey> jobKeys = scheduler.getJobKeys(matcher); for (JobKey jobKey : jobKeys) { List<? extends Trigger> triggers = scheduler.getTriggersOfJob(jobKey); for (Trigger trigger : triggers) { ScheduleJob scheduleJob = new ScheduleJob(); scheduleJob.setName(jobKey.getName()); scheduleJob.setGroup(jobKey.getGroup()); Trigger.TriggerState triggerState = scheduler.getTriggerState(trigger.getKey()); scheduleJob.setStatus(triggerState.name()); //獲取要執行的定時任務類名 JobDetail jobDetail=scheduler.getJobDetail(jobKey); scheduleJob.setClassName(jobDetail.getJobClass().getName()); //判斷trigger if (trigger instanceof SimpleTrigger) { SimpleTrigger simple = (SimpleTrigger) trigger; scheduleJob.setCronExpression("重複次數:"+ (simple.getRepeatCount() == -1 ? "無限" : simple.getRepeatCount()) +",重複間隔:"+(simple.getRepeatInterval()/1000L)); scheduleJob.setDescription(simple.getDescription()); } if (trigger instanceof CronTrigger) { CronTrigger cron = (CronTrigger) trigger; scheduleJob.setCronExpression(cron.getCronExpression()); scheduleJob.setDescription(cron.getDescription()==null?("觸發器:" + trigger.getKey()):cron.getDescription()); } scheduleJobList.add(scheduleJob); } } } catch (Exception e) { e.printStackTrace(); } return scheduleJobList; } /** * 獲取全部運行中的任務 * @return 結果集合 */ public List<ScheduleJob> getAllRuningScheduleJob(){ List<ScheduleJob> scheduleJobList=null; try { List<JobExecutionContext> executingJobs = scheduler.getCurrentlyExecutingJobs(); scheduleJobList = new ArrayList<ScheduleJob>(executingJobs.size()); for (JobExecutionContext executingJob : executingJobs) { ScheduleJob scheduleJob = new ScheduleJob(); JobDetail jobDetail = executingJob.getJobDetail(); JobKey jobKey = jobDetail.getKey(); Trigger trigger = executingJob.getTrigger(); scheduleJob.setName(jobKey.getName()); scheduleJob.setGroup(jobKey.getGroup()); //scheduleJob.setDescription("觸發器:" + trigger.getKey()); Trigger.TriggerState triggerState = scheduler.getTriggerState(trigger.getKey()); scheduleJob.setStatus(triggerState.name()); //獲取要執行的定時任務類名 scheduleJob.setClassName(jobDetail.getJobClass().getName()); //判斷trigger if (trigger instanceof SimpleTrigger) { SimpleTrigger simple = (SimpleTrigger) trigger; scheduleJob.setCronExpression("重複次數:"+ (simple.getRepeatCount() == -1 ? "無限" : simple.getRepeatCount()) +",重複間隔:"+(simple.getRepeatInterval()/1000L)); scheduleJob.setDescription(simple.getDescription()); } if (trigger instanceof CronTrigger) { CronTrigger cron = (CronTrigger) trigger; scheduleJob.setCronExpression(cron.getCronExpression()); scheduleJob.setDescription(cron.getDescription()); } scheduleJobList.add(scheduleJob); } } catch (SchedulerException e) { e.printStackTrace(); } return scheduleJobList; } /** * 獲取全部的觸發器 * @return 結果集合 */ public List<ScheduleJob> getTriggersInfo(){ try { GroupMatcher<TriggerKey> matcher = GroupMatcher.anyTriggerGroup(); Set<TriggerKey> Keys = scheduler.getTriggerKeys(matcher); List<ScheduleJob> triggers = new ArrayList<ScheduleJob>(); for (TriggerKey key : Keys) { Trigger trigger = scheduler.getTrigger(key); ScheduleJob scheduleJob = new ScheduleJob(); scheduleJob.setName(trigger.getJobKey().getName()); scheduleJob.setGroup(trigger.getJobKey().getGroup()); scheduleJob.setStatus(scheduler.getTriggerState(key)+""); if (trigger instanceof SimpleTrigger) { SimpleTrigger simple = (SimpleTrigger) trigger; scheduleJob.setCronExpression("重複次數:"+ (simple.getRepeatCount() == -1 ? "無限" : simple.getRepeatCount()) +",重複間隔:"+(simple.getRepeatInterval()/1000L)); scheduleJob.setDescription(simple.getDescription()); } if (trigger instanceof CronTrigger) { CronTrigger cron = (CronTrigger) trigger; scheduleJob.setCronExpression(cron.getCronExpression()); scheduleJob.setDescription(cron.getDescription()); } triggers.add(scheduleJob); } return triggers; } catch (SchedulerException e) { e.printStackTrace(); } return null; } /** * 暫停任務 * @param name 任務名 * @param group 任務組 */ public void stopJob(String name, String group){ JobKey key = new JobKey(name, group); try { scheduler.pauseJob(key); } catch (SchedulerException e) { e.printStackTrace(); } } /** * 恢復任務 * @param name 任務名 * @param group 任務組 */ public void restartJob(String name, String group){ JobKey key = new JobKey(name,group); try { scheduler.resumeJob(key); } catch (SchedulerException e) { e.printStackTrace(); } } /** * 立馬執行一次任務 * @param name 任務名 * @param group 任務組 */ public void startNowJob(String name, String group){ JobKey jobKey = JobKey.jobKey(name, group); try { scheduler.triggerJob(jobKey); } catch (SchedulerException e) { e.printStackTrace(); } } /** * 刪除任務 * @param name 任務名 * @param group 任務組 */ public void delJob(String name, String group){ JobKey key = new JobKey(name,group); try { scheduler.deleteJob(key); } catch (SchedulerException e) { e.printStackTrace(); } } /** * 修改觸發器時間 * @param name 任務名 * @param group 任務組 * @param cron cron表達式 */ public void modifyTrigger(String name,String group,String cron){ try { TriggerKey key = TriggerKey.triggerKey(name, group); //Trigger trigger = scheduler.getTrigger(key); CronTrigger newTrigger = (CronTrigger) TriggerBuilder.newTrigger() .withIdentity(key) .withSchedule(CronScheduleBuilder.cronSchedule(cron)) .build(); scheduler.rescheduleJob(key, newTrigger); } catch (SchedulerException e) { e.printStackTrace(); } } /** * 暫停調度器 */ public void stopScheduler(){ try { if (!scheduler.isInStandbyMode()) { scheduler.standby(); } } catch (SchedulerException e) { e.printStackTrace(); } } }