Quartz 仿SqlServer 作业管理

1、效果图

列表为自定义作业类,cron表达式定义任务执行计划,操作分别为开启执行计划,立即执行一次。

2、关键代码

	/**
	 * 立即执行一次任务
     * @param job
     */
    public void runJobImmediately(ScheduleJob job) throws SchedulerException{
    	JobKey jobKey = new JobKey(job.getJobKey(), job.getJobGroup());
    	JobDetail jobDetail = scheduler.getJobDetail(jobKey);
    	if(jobDetail !=null){
    		scheduler.triggerJob(jobKey);
    	}else{
    		jobDetail =         JobBuilder.newJob(QuartzJobAgent.class).storeDurably(true).withIdentity(job.getJobKey(), job.getJobGroup()).build();
    		jobDetail.getJobDataMap().put("scheduleJob", job);
    		scheduler.addJob(jobDetail, true);
    		scheduler.triggerJob(jobDetail.getKey());
    	}
    }
/**
	 * 添加一个任务
     * @param job
     */
	public void addJob(ScheduleJob job){
		try {
			TriggerKey triggerKey = TriggerKey.triggerKey(job.getJobKey(), job.getJobGroup());
			CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey);
			// 不存在,创建一个
			if (null == trigger) {
				/*JobDetail jobDetail = JobBuilder.newJob(QuartzJobAgent.class).withIdentity(job.getJobKey(), job.getJobGroup()).build();
				jobDetail.getJobDataMap().put("scheduleJob", job);*/
				JobKey jobKey = new JobKey(job.getJobKey(), job.getJobGroup());
		    	JobDetail jobDetail = scheduler.getJobDetail(jobKey);
		    	if(jobDetail == null){
		    		jobDetail = JobBuilder.newJob(QuartzJobAgent.class).storeDurably(true).withIdentity(job.getJobKey(), job.getJobGroup()).build();
		    		jobDetail.getJobDataMap().put("scheduleJob", job);
		    	}
				// 表达式调度构建器
				CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(job.getCronExpression());
				// 按新的cronExpression表达式构建一个新的trigger 此处withIdentity 不是JOB的key,只是方便管理用同样的名称和组,
				// forJob: 当JOB已经保存,此时再进行scheduleJob(jobDetail, trigger)会报JOB已经存在异常,要想只保存trigger,先关联JOBDETAIL调用forJob方法
				//trigger = TriggerBuilder.newTrigger().withIdentity(job.getJobKey(), job.getJobGroup()).withSchedule(scheduleBuilder).build();
				trigger = TriggerBuilder.newTrigger().withIdentity(job.getJobKey(), job.getJobGroup()).forJob(jobDetail).withSchedule(scheduleBuilder).build();
				//scheduler.scheduleJob(jobDetail, trigger);
				scheduler.scheduleJob(trigger);
			} else {
				// Trigger已存在,那么更新相应的定时设置
				// 表达式调度构建器
				CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(job.getCronExpression());
				// 按新的cronExpression表达式重新构建trigger
				trigger = trigger.getTriggerBuilder().withIdentity(triggerKey).withSchedule(scheduleBuilder).build();
				// 按新的trigger重新设置job执行
				scheduler.rescheduleJob(triggerKey, trigger);
			}
			if(job.getJobStatus().equals("1")){
				pauseJob(job);
			}
		} catch (SchedulerException e){
			e.printStackTrace();
		}
	}
/**
	 * 删除一个任务
	 * @param scheduleJob
 	*/
	public void removeJob(ScheduleJob job){
		logger.info(job.getJobName(),"删除定时任务");
		TriggerKey triggerKey = TriggerKey.triggerKey(job.getJobKey(), job.getJobGroup());
		JobKey jobKey = JobKey.jobKey(job.getJobKey(),job.getJobGroup());
		//CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey);
		try {
			scheduler.pauseTrigger(triggerKey);
			scheduler.unscheduleJob(triggerKey);
			scheduler.deleteJob(jobKey);
		} catch(SchedulerException e){
			e.printStackTrace();
		}
	}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值