Quartz的任務的臨時啟動和暫停和恢復
Quartz的任務的臨時啟動和暫停和恢復
在項目中需要手動啟停某些服務,那么需要有一個控制這些任務的類。由于任務是有Quartz控制的,我們只需要通過Quartz的相關的API實現相關的功能即可。
package com.gbsoft.rpt.qtz;
import java.util.Date;
import java.util.List;
import java.util.Map;
import org.quartz.JobDataMap;
import org.quartz.JobDetail;
import org.quartz.JobKey;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.Trigger;
import org.quartz.TriggerKey;
import org.quartz.impl.StdSchedulerFactory;
import org.quartz.impl.matchers.GroupMatcher;
/**
* 一個簡單的quartz任務管理器
* @author 123
*
*/
public class QuartzSchedule {
private static Scheduler scheduler=getScheduler();
/**
* 創建一個調度對象
* @return
* @throws SchedulerException
*/
private static Scheduler getScheduler() {
SchedulerFactory sf = new StdSchedulerFactory();
Scheduler scheduler=null;
try {
scheduler = sf.getScheduler();
} catch (SchedulerException e) {
e.printStackTrace();
}
return scheduler;
}
public static Scheduler getInstanceScheduler(){
return scheduler;
}
/**
* 啟動一個調度對象
* @throws SchedulerException
*/
public void start() throws SchedulerException
{
scheduler.start();
}
/**
* 檢查調度是否啟動
* @return
* @throws SchedulerException
*/
public boolean isStarted() throws SchedulerException
{
return scheduler.isStarted();
}
/**
* 關閉調度信息
* @throws SchedulerException
*/
public void shutdown() throws SchedulerException {
scheduler.shutdown();
}
/**
* 添加調度的job信息
* @param jobdetail
* @param trigger
* @return
* @throws SchedulerException
*/
public Date scheduleJob(JobDetail jobdetail, Trigger trigger)
throws SchedulerException{
return scheduler.scheduleJob(jobdetail, trigger);
}
/**
* 添加相關的觸發器
* @param trigger
* @return
* @throws SchedulerException
*/
public Date scheduleJob(Trigger trigger) throws SchedulerException{
return scheduler.scheduleJob(trigger);
}
/**
* 添加多個job任務
* @param triggersAndJobs
* @param replace
* @throws SchedulerException
*/
public void scheduleJobs(Map<JobDetail, List<Trigger>> triggersAndJobs, boolean replace) throws SchedulerException
{
scheduler.scheduleJobs(triggersAndJobs, replace);
}
/**
* 停止調度Job任務
* @param triggerkey
* @return
* @throws SchedulerException
*/
public boolean unscheduleJob(TriggerKey triggerkey)
throws SchedulerException{
return scheduler.unscheduleJob(triggerkey);
}
/**
* 停止調度多個觸發器相關的job
* @param list
* @return
* @throws SchedulerException
*/
public boolean unscheduleJobs(List<TriggerKey> triggerKeylist) throws SchedulerException{
return scheduler.unscheduleJobs(triggerKeylist);
}
/**
* 重新恢復觸發器相關的job任務
* @param triggerkey
* @param trigger
* @return
* @throws SchedulerException
*/
public Date rescheduleJob(TriggerKey triggerkey, Trigger trigger)
throws SchedulerException{
return scheduler.rescheduleJob(triggerkey, trigger);
}
/**
* 添加相關的job任務
* @param jobdetail
* @param flag
* @throws SchedulerException
*/
public void addJob(JobDetail jobdetail, boolean flag)
throws SchedulerException {
scheduler.addJob(jobdetail, flag);
}
/**
* 刪除相關的job任務
* @param jobkey
* @return
* @throws SchedulerException
*/
public boolean deleteJob(JobKey jobkey) throws SchedulerException{
return scheduler.deleteJob(jobkey);
}
/**
* 刪除相關的多個job任務
* @param jobKeys
* @return
* @throws SchedulerException
*/
public boolean deleteJobs(List<JobKey> jobKeys)
throws SchedulerException{
return scheduler.deleteJobs(jobKeys);
}
/**
*
* @param jobkey
* @throws SchedulerException
*/
public void triggerJob(JobKey jobkey) throws SchedulerException {
scheduler.triggerJob(jobkey);
}
/**
*
* @param jobkey
* @param jobdatamap
* @throws SchedulerException
*/
public void triggerJob(JobKey jobkey, JobDataMap jobdatamap)
throws SchedulerException {
scheduler.triggerJob(jobkey, jobdatamap);
}
/**
* 停止一個job任務
* @param jobkey
* @throws SchedulerException
*/
public void pauseJob(JobKey jobkey) throws SchedulerException {
scheduler.pauseJob(jobkey);
}
/**
* 停止多個job任務
* @param groupmatcher
* @throws SchedulerException
*/
public void pauseJobs(GroupMatcher<JobKey> groupmatcher)
throws SchedulerException {
scheduler.pauseJobs(groupmatcher);
}
/**
* 停止使用相關的觸發器
* @param triggerkey
* @throws SchedulerException
*/
public void pauseTrigger(TriggerKey triggerkey)
throws SchedulerException {
scheduler.pauseTrigger(triggerkey);
}
public void pauseTriggers(GroupMatcher<TriggerKey> groupmatcher)
throws SchedulerException {
scheduler.pauseTriggers(groupmatcher);
}
/**
* 恢復相關的job任務
* @param jobkey
* @throws SchedulerException
*/
public void resumeJob(JobKey jobkey) throws SchedulerException {
scheduler.pauseJob(jobkey);
}
public void resumeJobs(GroupMatcher<JobKey> matcher)
throws SchedulerException {
scheduler.resumeJobs(matcher);
}
public void resumeTrigger(TriggerKey triggerkey)
throws SchedulerException {
scheduler.resumeTrigger(triggerkey);
}
public void resumeTriggers(GroupMatcher<TriggerKey> groupmatcher)
throws SchedulerException
{
scheduler.resumeTriggers(groupmatcher);
}
/**
* 暫停調度中所有的job任務
* @throws SchedulerException
*/
public void pauseAll() throws SchedulerException
{
scheduler.pauseAll();
}
/**
* 恢復調度中所有的job的任務
* @throws SchedulerException
*/
public void resumeAll() throws SchedulerException
{
scheduler.resumeAll();
}
}
package com.gbsoft.rpt.qrz;
import java.util.Date;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
/**
* 一個簡單的quartz調用job
* @author 123
*
*/
public class HelloJob implements Job {
private static Logger _log = LoggerFactory.getLogger(HelloJob.class);
public HelloJob() {
}
public void execute(JobExecutionContext context)
throws JobExecutionException {
_log.info("Hello World! - " + new Date());
}
}創建觸發器和調用相關的Job
package com.gbsoft.rpt.qrz; import static org.quartz.DateBuilder.evenMinuteDate; import static org.quartz.JobBuilder.newJob; import static org.quartz.TriggerBuilder.newTrigger; import java.util.Date;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.Trigger;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* 一個簡單的測試quartz任務管理器測試類
* @author 123
*
*/
public class QuartzScheduleMain {
/**
*
* @throws Exception
*/
public void run() throws Exception {
Logger log = LoggerFactory.getLogger(QuartzScheduleMain.class);
log.info("------- Initializing ----------------------");
// First we must get a reference to a scheduler
//從調度管理器中獲取調度對象
Scheduler sched = QuartzScheduleMgr.getInstanceScheduler();
log.info("------- Initialization Complete -----------");
// computer a time that is on the next round minute
Date runTime = evenMinuteDate(new Date());
log.info("------- Scheduling Job -------------------");
// define the job and tie it to our HelloJob class
//創建相關的job信息
JobDetail job = newJob(HelloJob.class)
.withIdentity("job1", "group1")
.build();
// Trigger the job to run on the next round minute
//創建一個觸發器的名稱
Trigger trigger = newTrigger()
.withIdentity("trigger1", "group1")
.startAt(runTime)
.build();
// Tell quartz to schedule the job using our trigger
//設置調度相關的Job
sched.scheduleJob(job, trigger);
log.info(job.getKey() + " will run at: " + runTime);
// Start up the scheduler (nothing can actually run until the
// scheduler has been started)
//啟動調度任務
sched.start();
log.info("------- Started Scheduler -----------------");
try {
Thread.sleep(25L * 1000L);
// executing...
} catch (Exception e) {
}
//暫時停止Job任務開始執行
log.info("-------pauseJob.. -------------");
sched.pauseJob(job.getKey());
try {
Thread.sleep(10L * 1000L);
} catch (Exception e) {
}
log.info("------- resumeJob... -------------");
//恢復Job任務開始執行
sched.resumeJob(job.getKey());
try {
Thread.sleep(10L * 1000L);
// executing...
} catch (Exception e) {
}
// wait long enough so that the scheduler as an opportunity to
// run the job!
log.info("------- Waiting 65 seconds... -------------");
try {
// wait 65 seconds to show job
Thread.sleep(65L * 1000L);
// executing...
} catch (Exception e) {
}
// shut down the scheduler
log.info("------- Shutting Down ---------------------");
sched.shutdown(true);
log.info("------- Shutdown Complete -----------------");
}
public static void main(String[] args) throws Exception {
QuartzScheduleMain example = new QuartzScheduleMain();
example.run();
}
}官網地址:http://www.quartz-scheduler.org/documentation/quartz-2.1.x/quick-start
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!