spring quarartzはタイミングタスク、遅延タスクの動的増加、削除、修正、調査を実現します。

24152 ワード

前の2つのブログを参照してください。
  • RAM Job Store方式で構成されています。https://blog.csdn.net/llmys/article/details/81069445
  • Job StoreTX方式の恒久化はデータベースにあり、https://blog.csdn.net/llmys/article/details/81069638
  • まず私が必要とするquartzに関する情報は、ジョブ名、ジョブグループ名、ジョブ開始時間、ジョブ終了時間などを含み、これらの属性を保存するためにUniQuartzBenのクラスを定義します。
    import java.util.Date;
    
    public class UniQuartzBean {
    	private String jobName; //     
    	private String jobGroupName; //      
    	private String oldJobName; //     
    	private String oldJobGroupName; //      
    	
    	private String schedulerInstanceId;	//    ID
    	private String schedulerName;		//      
    	private String triggerName;		//      
    	private String triggerGroupName;		//       
    	private String jobClass;		//      
    	private String description;		//     
    	
    	private Date startTime;		//         
    	private Date previousTime;		//        
    	private Date nextTime;		//        
    	private Date endTime;		//     
    	
    	private int repeatCount;	//          (    )
    	private long repeatInterval; //       
    	private int timesTriggered;	//        
    	private String cronExpression; //         (    )
    	private String triggerState; //     
    	
    	private String jobId;		// FireInstanceId        ,             
    	private Long jobRunTime;	//        ,              ,       -1
    	/**
    	 * 
        None:Trigger    ,      ,         ,  Trigger     
    NORMAL:
    PAUSED:
    COMPLETE: ,
    BLOCKED:
    ERROR:
    */ private String triggerType; // private String timeZone; // timeZone private boolean isConcurrent; // public UniQuartzBean() { super(); } // 、 public UniQuartzBean(String jobName, String jobGroupName) { super(); this.jobName = jobName; this.jobGroupName = jobGroupName; } // public UniQuartzBean(String jobName, String jobGroupName, String oldJobName, String oldJobGroupName) { super(); this.jobName = jobName; this.jobGroupName = jobGroupName; this.oldJobName = oldJobName; this.oldJobGroupName = oldJobGroupName; } ...Set、Get }
    また、設定タスクを変更するには、タスクの時間間隔、タスクの回数、終了時間などを設定し、クラスを定義してこれらの属性を保存します。
    public class UniQuartzConfig {
    	/**
    	 *        ?	
    * , true; true
    * , false; * @return */ private boolean isTimedTask = true; /** * , ;
    * :'0/5 * * * * ?' * @return */ private String cron = ""; /** * , delayTime ;
    * delayTimeType;
    * 0, ; * @return */ private int delayTime = 0; /** * , ' ';
    * IntervalUnit.MILLISECOND
    * IntervalUnit.SECOND
    * IntervalUnit.MINUTE
    * IntervalUnit.HOUR
    * IntervalUnit.DAY
    * IntervalUnit.WEEK
    * IntervalUnit.MONTH
    * IntervalUnit.YEAR * @return */ private IntervalUnit delayTimeType = IntervalUnit.SECOND; /** * “ ” , 1
    * “ ” , “intervalTimeType” * @return */ private int intervalTime = 1; /** * “ ” , ' ';
    * IntervalUnit.MILLISECOND
    * IntervalUnit.SECOND
    * IntervalUnit.MINUTE
    * IntervalUnit.HOUR
    * @return */ private IntervalUnit intervalTimeType = IntervalUnit.SECOND; /** * “ ” , 1;
    * “0” , ;
    * “-1” , , endTime,endTimeType; * @return */ private int repeatCount = 1; /** * , ;
    * “endTimeType” * @return */ private int endTime = 0; /** * , ;
    * IntervalUnit.MILLISECOND
    * IntervalUnit.SECOND
    * IntervalUnit.MINUTE
    * IntervalUnit.HOUR
    * IntervalUnit.DAY
    * IntervalUnit.WEEK
    * IntervalUnit.MONTH
    * IntervalUnit.YEAR * @return */ private IntervalUnit endTimeType = IntervalUnit.SECOND; public static UniQuartzConfig newInstance() { return new UniQuartzConfig(); } private UniQuartzConfig() { super(); } ...Set、Get }
    次はservice類で、任務の添削を実現します。
    @Component
    public class UniQuartzService implements UniQuartz {
    	@Autowired
    	private Scheduler quartzScheduler;
    
    	/**
    	 * 
    	 * @param uqb
    	 *                、     
    	 * @param uqc
    	 *                   
    	 * @param quartzClass
    	 *                  
    	 * @param parameter
    	 *                       
    	 * @return
    	 */
    	@Override
    	public boolean addJob(UniQuartzBean uqb, UniQuartzConfig uqc, Class extends Job> quartzClass, Object parameter) {
    		try {
    			//          
    			boolean exist = isTriggerExist(uqb);
    
    			//      ,           
    			Trigger trigger = getTrigger(uqb, uqc);
    			if (exist) {
    				if (!ObjectUtils.isEmpty(parameter)) {
    					trigger.getJobDataMap().put("context", parameter); //             
    				}
    				TriggerKey triggerKey = TriggerKey.triggerKey(uqb.getJobName(), uqb.getJobGroupName());
    				quartzScheduler.rescheduleJob(triggerKey, trigger);
    			} else {
    				//   JobDetail,     
    				JobDetail jobDetail = getNewJob(uqb, quartzClass);
    				if (!ObjectUtils.isEmpty(parameter)) {
    					jobDetail.getJobDataMap().put("context", parameter);
    				}
    				//     
    				quartzScheduler.scheduleJob(jobDetail, trigger);
    				//quartzScheduler.start();
    			}
    			System.out.println(JSON.toJSONString(uqc));
    		} catch (SchedulerException e) {
    			e.printStackTrace();
    		}
    		return true;
    	}
    
    	/**
    	 *        
    	 * 
    	 * @param uqb
    	 * @param uqc
    	 * @return
    	 */
    	@Override
    	public boolean modifyJobTime(UniQuartzBean uqb, UniQuartzConfig uqc) {
    		try {
    			if (isTriggerExist(uqb) == false) {
    				System.err.println("   [JobName=" + uqb.getJobName() + ",JobGroupName=" + uqb.getJobGroupName());
    				return false;
    			} else {
    				addJob(uqb, uqc, null, null);
    				return true;
    			}
    		} catch (SchedulerException e) {
    			e.printStackTrace();
    		}
    		return false;
    	}
    
    	/**
    	 *        
    	 * 
    	 * @param jobName
    	 * @param jobGroupName
    	 * @param uqc
    	 * @return
    	 */
    	@Override
    	public boolean modifyJobTime(String jobName, String jobGroupName, UniQuartzConfig uqc) {
    		UniQuartzBean uqb = new UniQuartzBean(jobName, jobGroupName);
    		return modifyJobTime(uqb, uqc);
    	}
    
    	/**
    	 *     
    	 */
    	@Override
    	public boolean pauseJob(UniQuartzBean uqb) {
    		return pauseJob(uqb.getJobName(), uqb.getJobGroupName());
    	}
    
    	/**
    	 *     
    	 */
    	@Override
    	public boolean pauseJob(String jobName, String jobGroupName) {
    		JobKey jobKey = JobKey.jobKey(jobName, jobGroupName);
    		try {
    			//      
    			quartzScheduler.pauseTrigger(TriggerKey.triggerKey(jobName, jobGroupName));
    			quartzScheduler.pauseJob(jobKey);
    			return true;
    		} catch (SchedulerException e) {
    			e.printStackTrace();
    		}
    		return false;
    	}
    
    	/**
    	 *       
    	 */
    	@Override
    	public boolean pauseAllJob() {
    		try {
    			quartzScheduler.pauseAll();
    		} catch (SchedulerException e) {
    			e.printStackTrace();
    		}
    		return true;
    	}
    
    	/**
    	 *     
    	 */
    	@Override
    	public boolean resumeJob(UniQuartzBean uqb) {
    		return resumeJob(uqb.getJobName(), uqb.getJobGroupName());
    	}
    
    	/**
    	 *     
    	 */
    	@Override
    	public boolean resumeJob(String jobName, String jobGroupName) {
    		JobKey jobKey = JobKey.jobKey(jobName, jobGroupName);
    		try {
    			//      
    			quartzScheduler.resumeTrigger(TriggerKey.triggerKey(jobName, jobGroupName));
    			quartzScheduler.resumeJob(jobKey);
    			return true;
    		} catch (SchedulerException e) {
    			e.printStackTrace();
    		}
    		return false;
    	}
    
    	/**
    	 *     
    	 */
    	@Override
    	public void resumeAllJob() {
    		try {
    			quartzScheduler.resumeAll();
    		} catch (SchedulerException e) {
    			e.printStackTrace();
    		}
    	}
    
    	/**
    	 *     
    	 */
    	@Override
    	public boolean deleteJob(UniQuartzBean uqb) {
    		return deleteJob(uqb.getJobName(), uqb.getJobGroupName());
    	}
    
    	/**
    	 *     
    	 */
    	@Override
    	public boolean deleteJob(String jobName, String jobGroupName) {
    		JobKey jobKey = JobKey.jobKey(jobName, jobGroupName);
    		try {
    			//      
    			quartzScheduler.pauseTrigger(TriggerKey.triggerKey(jobName, jobGroupName));
    			//      
    			quartzScheduler.unscheduleJob(TriggerKey.triggerKey(jobName, jobGroupName));
    			//     
    			quartzScheduler.deleteJob(jobKey);
    			return true;
    		} catch (SchedulerException e) {
    			e.printStackTrace();
    		}
    		return false;
    	}
    
    	/**
    	 *           ,             。     (false)。          。
    	 */
    	@Override
    	public void shutdown() {
    		try {
    			quartzScheduler.shutdown();
    		} catch (SchedulerException e) {
    			e.printStackTrace();
    		}
    	}
    
    	/**
    	 *          
    	 * 
    	 * @param uqb
    	 * @param trigName
    	 * @param trigGroupName
    	 * @return
    	 * @throws SchedulerException
    	 */
    	private boolean isTriggerExist(UniQuartzBean uqb) throws SchedulerException {
    		boolean bExist = false;
    		TriggerKey triggerKey = TriggerKey.triggerKey(uqb.getJobName(), uqb.getJobGroupName());
    		Trigger trigger = quartzScheduler.getTrigger(triggerKey);
    		if (!ObjectUtils.isEmpty(trigger)) {
    			bExist = true;
    		}
    		return bExist;
    	}
    
    	/**
    	 *      ,          ;   ,       ;
    	 * 
    	 * @param uqb
    	 * @param uqc
    	 * @return
    	 * @throws SchedulerException
    	 */
    	private Trigger getTrigger(UniQuartzBean uqb, UniQuartzConfig uqc) throws SchedulerException {
    		return uqc.isTimedTask() ? configCronTrigger(uqb, uqc) : configSimpleTrigger(uqb, uqc);
    	}
    
    	/**
    	 *     -     
    	 * 
    	 * @param uqb
    	 * @param uqc
    	 * @return
    	 * @throws SchedulerException
    	 */
    	private Trigger configCronTrigger(UniQuartzBean uqb, UniQuartzConfig uqc) throws SchedulerException {
    		Trigger trigger = null;
    		ScheduleBuilder> scheduleBuilder = getScheduleBuilder(uqc);
    		if (isTriggerExist(uqb)) { //   
    			System.out.println("    -     ---  ");
    			TriggerKey triggerKey = TriggerKey.triggerKey(uqb.getJobName(), uqb.getJobGroupName());
    			trigger = quartzScheduler.getTrigger(triggerKey);
    			trigger = ((CronTrigger) trigger).getTriggerBuilder().withIdentity(uqb.getJobName(), uqb.getJobGroupName())
    					.withSchedule((CronScheduleBuilder) scheduleBuilder).withDescription(uqb.getDescription()).build();
    		} else { //    
    			System.out.println("    -     ---   ");
    			trigger = TriggerBuilder.newTrigger().withIdentity(uqb.getJobName(), uqb.getJobGroupName())
    					.withSchedule(scheduleBuilder).withDescription(uqb.getDescription()).build();
    		}
    		return trigger;
    	}
    
    	/**
    	 *      
    	 * 
    	 * @param uqa
    	 * @return
    	 */
    	private ScheduleBuilder> getScheduleBuilder(UniQuartzConfig uqc) {
    		ScheduleBuilder> scheduleBuilder = null;
    		if (uqc.isTimedTask()) { //     
    			scheduleBuilder = CronScheduleBuilder.cronSchedule(uqc.getCron());
    		} else { //     、    
    			scheduleBuilder = SimpleScheduleBuilder.simpleSchedule();
    		}
    		return scheduleBuilder;
    	}
    
    	/**
    	 *       、       、    、    、      、    、    、      
    	 * 
    	 * @param uqb
    	 * @param uqc
    	 * @return
    	 * @throws SchedulerException
    	 */
    	private Trigger configSimpleTrigger(UniQuartzBean uqb, UniQuartzConfig uqc) throws SchedulerException {
    		System.out.println("  Simple   .    " + uqc.getRepeatCount());
    		if (uqc.getRepeatCount() == -1) { //          ,        
    			System.out.println("      -   ");
    			return configSimpleTriggerEnd(uqb, uqc);
    		} else if (uqc.getRepeatCount() == 0) { //       
    			System.out.println("      -   ....");
    			return configSimpleTriggerForever(uqb, uqc);
    		} else { //     
    			System.out.println("    -   ...");
    			return configSimpleTriggerCount(uqb, uqc);
    		}
    	}
    
    	/**
    	 *        
    	 * 
    	 * @param trigName
    	 * @param trigGroupName
    	 * @param uqa
    	 * @return
    	 * @throws SchedulerException
    	 */
    	private Trigger configSimpleTriggerEnd(UniQuartzBean uqb, UniQuartzConfig uqc) throws SchedulerException {
    		Trigger trigger = null;
    		TriggerKey triggerKey = TriggerKey.triggerKey(uqb.getJobName(), uqb.getJobGroupName());
    		SimpleScheduleBuilder scheduleBuilder = (SimpleScheduleBuilder) getScheduleBuilder(uqc);
    		//       
    		Date startDate = DateBuilder.futureDate(uqc.getDelayTime(), uqc.getDelayTimeType());
    		//     
    		Date endDate = DateBuilder.futureDate(uqc.getEndTime(), uqc.getEndTimeType());
    		//       
    		scheduleBuilder = configSimpleTriggerInterval(scheduleBuilder, uqc);
    		scheduleBuilder = scheduleBuilder.repeatForever();
    		if (isTriggerExist(uqb)) {
    			trigger = quartzScheduler.getTrigger(triggerKey);
    
    			trigger = ((SimpleTrigger) trigger).getTriggerBuilder()
    					.withIdentity(uqb.getJobName(), uqb.getJobGroupName()).withSchedule(scheduleBuilder)
    					.withDescription(uqb.getDescription()).startAt(startDate).endAt(endDate).build();
    			System.out.println("    -     -     ---  ");
    		} else {
    			System.out.println("    -     -     ---   ");
    			//      
    			trigger = TriggerBuilder.newTrigger().withIdentity(uqb.getJobName(), uqb.getJobGroupName())
    					.withDescription(uqb.getDescription()).withSchedule(scheduleBuilder).startAt(startDate)
    					.endAt(endDate).build();
    		}
    		return trigger;
    	}
    
    	/**
    	 *            、    
    	 * 
    	 * @param scheduleBuilder
    	 * @param uqa
    	 */
    	private SimpleScheduleBuilder configSimpleTriggerInterval(SimpleScheduleBuilder scheduleBuilder,
    			UniQuartzConfig uqc) {
    		SimpleScheduleBuilder res = scheduleBuilder;
    		if (uqc.getIntervalTime() > 0) { //       0   
    			System.out.println("         0");
    			switch (uqc.getIntervalTimeType()) {
    			case MILLISECOND:
    				System.out.println("       :" + uqc.getIntervalTime());
    				res = scheduleBuilder.withIntervalInMilliseconds(uqc.getIntervalTime());
    				break;
    			case SECOND:
    				System.out.println("      :" + uqc.getIntervalTime());
    				res = scheduleBuilder.withIntervalInSeconds(uqc.getIntervalTime());
    				break;
    			case MINUTE:
    				System.out.println("      :" + uqc.getIntervalTime());
    				res = scheduleBuilder.withIntervalInMinutes(uqc.getIntervalTime());
    				break;
    			case HOUR:
    				System.out.println("       :" + uqc.getIntervalTime());
    				res = scheduleBuilder.withIntervalInHours(uqc.getIntervalTime());
    				break;
    			default:
    				System.err.println("            :" + uqc.getIntervalTimeType());
    				break;
    			}
    		} else {
    			System.err.println("           0.");
    		}
    		return res;
    	}
    
    	/**
    	 *       
    	 * 
    	 * @param uqb
    	 * @param uqc
    	 * @return
    	 * @throws SchedulerException
    	 */
    	private Trigger configSimpleTriggerForever(UniQuartzBean uqb, UniQuartzConfig uqc) throws SchedulerException {
    		Trigger trigger = null;
    		TriggerKey triggerKey = TriggerKey.triggerKey(uqb.getJobName(), uqb.getJobGroupName());
    		SimpleScheduleBuilder scheduleBuilder = (SimpleScheduleBuilder) getScheduleBuilder(uqc);
    		//       
    		Date startDate = DateBuilder.futureDate(uqc.getDelayTime(), uqc.getDelayTimeType());
    		//       
    		scheduleBuilder = configSimpleTriggerInterval(scheduleBuilder, uqc);
    		scheduleBuilder = scheduleBuilder.repeatForever();//     
    		if (isTriggerExist(uqb)) {
    			trigger = quartzScheduler.getTrigger(triggerKey);
    
    			trigger = ((SimpleTrigger) trigger).getTriggerBuilder()
    					.withIdentity(uqb.getJobName(), uqb.getJobGroupName()).withSchedule(scheduleBuilder)
    					.withDescription(uqb.getDescription()).startAt(startDate).build();
    			System.out.println("    -    -     ---  ");
    		} else {
    			System.out.println("    -    -     ---   ");
    			//      
    			trigger = TriggerBuilder.newTrigger().withIdentity(uqb.getJobName(), uqb.getJobGroupName())
    					.withDescription(uqb.getDescription()).withSchedule(scheduleBuilder).startAt(startDate).build();
    		}
    		return trigger;
    	}
    
    	/**
    	 *        
    	 * 
    	 * @param uqb
    	 * @param uqc
    	 * @return
    	 * @throws SchedulerException
    	 */
    	private Trigger configSimpleTriggerCount(UniQuartzBean uqb, UniQuartzConfig uqc) throws SchedulerException {
    		Trigger trigger = null;
    		TriggerKey triggerKey = TriggerKey.triggerKey(uqb.getJobName(), uqb.getJobGroupName());
    		SimpleScheduleBuilder scheduleBuilder = (SimpleScheduleBuilder) getScheduleBuilder(uqc);
    		//       
    		Date startDate = DateBuilder.futureDate(uqc.getDelayTime(), uqc.getDelayTimeType());
    		//       
    		scheduleBuilder = configSimpleTriggerInterval(scheduleBuilder, uqc);
    		scheduleBuilder = scheduleBuilder.withRepeatCount(uqc.getRepeatCount() - 1); //       
    		if (isTriggerExist(uqb)) {
    			System.out.println("    ---------------------2:" + "  ");
    			trigger = quartzScheduler.getTrigger(triggerKey);
    
    			trigger = ((SimpleTrigger) trigger).getTriggerBuilder()
    					.withIdentity(uqb.getJobName(), uqb.getJobGroupName()).withSchedule(scheduleBuilder)
    					.withDescription(uqb.getDescription()).startAt(startDate).build();
    		} else {
    			System.out.println("    ---------------------2:" + "   ");
    			//      
    			trigger = TriggerBuilder.newTrigger().withIdentity(uqb.getJobName(), uqb.getJobGroupName())
    					.withDescription(uqb.getDescription()).withSchedule(scheduleBuilder).startAt(startDate).build();
    		}
    		return trigger;
    	}
    
    	/**
    	 *         
    	 * 
    	 * @param uniSchTrig
    	 * @param quartzClass
    	 * @return
    	 */
    	private JobDetail getNewJob(UniQuartzBean uqb, Class extends Job> quartzClass) {
    		JobDetail jobDetail = JobBuilder.newJob(quartzClass).withIdentity(uqb.getJobName(), uqb.getJobGroupName())
    				.build();
    		return jobDetail;
    	}
    
    	private UniQuartzBean getJob(JobKey jobKey, Trigger trigger) {
    		UniQuartzBean uniQuartzBean = null;
    		try {
    			String jobName = jobKey.getName();
    			String jobGroupName = jobKey.getGroup();
    			// Trigger trigger = quartzScheduler.getTrigger(triggerKey);
    			if (!ObjectUtils.isEmpty(trigger)) {
    				uniQuartzBean = new UniQuartzBean();
    				//         ,    、     、     、      
    				uniQuartzBean.setJobName(jobName).setJobGroupName(jobGroupName).setTriggerName(jobName)
    						.setTriggerGroupName(jobGroupName);
    				//          ,   ID、     、     、    、    
    				uniQuartzBean.setSchedulerInstanceId(quartzScheduler.getSchedulerInstanceId())
    						.setSchedulerName(quartzScheduler.getSchedulerName());
    				JobDetail jobDetail = quartzScheduler.getJobDetail(jobKey);
    				uniQuartzBean.setJobClass("" + jobDetail.getJobClass()).setDescription(trigger.getDescription())
    						.setTriggerState(quartzScheduler.getTriggerState(trigger.getKey()).name());
    				//            
    				uniQuartzBean.setStartTime(trigger.getStartTime()).setPreviousTime(trigger.getPreviousFireTime())
    						.setNextTime(trigger.getNextFireTime()).setEndTime(trigger.getEndTime());
    				//       
    				uniQuartzBean.setConcurrent(jobDetail.isConcurrentExectionDisallowed());
    				//          、    、       、     
    				if (trigger instanceof CronTrigger) {
    					CronTrigger cronTrigger = (CronTrigger) trigger;
    					uniQuartzBean.setTriggerType("CronTrigger");
    					uniQuartzBean.setCronExpression(cronTrigger.getCronExpression())
    							.setTimeZone(cronTrigger.getTimeZone().getID());
    				} else if (trigger instanceof SimpleTrigger) {
    					SimpleTrigger simpleTrigger = (SimpleTrigger) trigger;
    					uniQuartzBean.setTriggerType("SimpleTrigger");
    					uniQuartzBean.setRepeatCount(simpleTrigger.getRepeatCount() + 1)
    							.setRepeatInterval(simpleTrigger.getRepeatInterval())
    							.setTimesTriggered(simpleTrigger.getTimesTriggered());
    				}
    			}
    		} catch (SchedulerException e) {
    			e.printStackTrace();
    		}
    		return uniQuartzBean;
    	}
    
    	/**
    	 *       
    	 * @param uqb
    	 * @return
    	 */
    	@Override
    	public UniQuartzBean getJob(UniQuartzBean uqb) {
    		return getJob(uqb.getJobName(), uqb.getJobGroupName());
    	}
    
    	/**
    	 *       
    	 * @param jobName
    	 * @param jobGroupName
    	 * @return
    	 */
    	@Override
    	public UniQuartzBean getJob(String jobName, String jobGroupName) {
    		UniQuartzBean uniQuartzBean = null;
    		try {
    			TriggerKey triggerKey = TriggerKey.triggerKey(jobName, jobGroupName);
    			Trigger trigger = quartzScheduler.getTrigger(triggerKey);
    			if (!ObjectUtils.isEmpty(trigger)) {
    				JobKey jobKey = trigger.getJobKey();
    				uniQuartzBean = getJob(jobKey, trigger);
    			}
    		} catch (SchedulerException e) {
    			e.printStackTrace();
    		}
    		return uniQuartzBean;
    	}
    
    	/**
    	 *        ,      quartz       
    	 * @return
    	 */
    	@Override
    	public List getAllJob() {
    		List listUniQuartzBean = new ArrayList<>();
    		try {
    			GroupMatcher matcher = GroupMatcher.anyJobGroup();
    			Set jobKeys = quartzScheduler.getJobKeys(matcher);
    			if (!CollectionUtils.isEmpty(jobKeys)) {
    				jobKeys.forEach(jobKey -> {
    					try {
    						List extends Trigger> listTrigger = quartzScheduler.getTriggersOfJob(jobKey);
    						if (!CollectionUtils.isEmpty(listTrigger)) {
    							listTrigger.forEach(trigger->{
    								UniQuartzBean uniQuartzBean = getJob(jobKey, trigger);
    								if (!ObjectUtils.isEmpty(uniQuartzBean)) {
    									listUniQuartzBean.add(uniQuartzBean);
    								}
    							});
    						}
    					} catch (SchedulerException e) {
    						e.printStackTrace();
    					}
    				});
    			}
    		} catch (SchedulerException e) {
    			e.printStackTrace();
    		}
    		return listUniQuartzBean;
    	}
    	
    	/**
    	 *        -       
    	 * 
    	 * @return
    	 */
    	@Override
    	public List getAllJobInstance() {
    		List listUniQuartzBean = new ArrayList<>();
    		try {
    			List listExecJob = quartzScheduler.getCurrentlyExecutingJobs();
    			if (!CollectionUtils.isEmpty(listExecJob)) {
    				listExecJob.forEach(execJob->{
    					JobKey jobKey = execJob.getJobDetail().getKey();
    					try {
    						List extends Trigger> listTrigger = quartzScheduler.getTriggersOfJob(jobKey);
    						if (!CollectionUtils.isEmpty(listTrigger)) {
    							listTrigger.forEach(trigger->{
    								//UniQuartzBean uniQuartzBean = getJob(jobKey, trigger);
    								UniQuartzBean uniQuartzBean = getRuningJob(execJob, trigger);
    								if (!ObjectUtils.isEmpty(uniQuartzBean)) {
    									listUniQuartzBean.add(uniQuartzBean);									
    								}
    							});
    						}
    					} catch (SchedulerException e) {
    						e.printStackTrace();
    					}
    				});
    			}
    		} catch (SchedulerException e) {
    			e.printStackTrace();
    		}
    		return listUniQuartzBean;
    	}
    	
    	/**
    	 *            
    	 * @param execJob
    	 * @param trigger
    	 * @return
    	 */
    	private UniQuartzBean getRuningJob(JobExecutionContext execJob, Trigger trigger) {
    		UniQuartzBean uniQuartzBean = null;
    		try {
    			JobKey jobKey = trigger.getJobKey();
    			String jobName = jobKey.getName();
    			String jobGroupName = jobKey.getGroup();
    			if (!ObjectUtils.isEmpty(trigger)) {
    				uniQuartzBean = new UniQuartzBean();
    				//         ,    、     、     、      
    				uniQuartzBean.setJobName(jobName).setJobGroupName(jobGroupName).setTriggerName(jobName)
    						.setTriggerGroupName(jobGroupName);
    				JobDetail jobDetail = quartzScheduler.getJobDetail(jobKey);
    				//     “  ”     、       、       
    				uniQuartzBean.setStartTime(execJob.getFireTime()).setPreviousTime(execJob.getPreviousFireTime())
    						.setNextTime(execJob.getNextFireTime());
    				//       
    				uniQuartzBean.setJobClass("" + jobDetail.getJobClass()).setDescription(trigger.getDescription());
    				//       、  ID
    				uniQuartzBean.setJobRunTime(execJob.getJobRunTime()).setJobId(execJob.getFireInstanceId());
    			}
    		} catch (SchedulerException e) {
    			e.printStackTrace();
    		}
    		return uniQuartzBean;
    	}
    }
    
    テスト:
    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration({ "classpath*:/spring-context*.xml", "classpath*:/quartz_jobs.xml" })
    public class UniQuartz2Test {
    	@Autowired
    	UniQuartz uniQuartz2;
    	
    	@Test
    	public void testAddJob_TimedTask() throws InterruptedException {
    		System.out.println("--------     ------start---------");
    		UniQuartzConfig uqc =UniQuartzConfig.newInstance().setCron("0/3 * * * * ?");
    		UniQuartzBean uqb = new UniQuartzBean("jobName2", "jobGroupName1");
    		uniQuartz2.addJob(uqb, uqc, TimedTaskJob.class, "  3     .");
    		uqb.setDescription("   ");
    		System.out.println("--------     ------stop---------");
    		int i= 0;
    		while (true) {
    			i++;
    			Thread.sleep(1000);
    			if (i >= 16)
    				break;
    		}
    	}
    }
    ブログを参照してください:
    http://itindex.net/detail/53315-spring-quartz-%E7%AE%A1%E7%90%86
    http://ifeve.com/quartz-5-simpletrigger/