quartz2.3.0(九)job任務監聽器,監聽任務執行前、后、取消手動處理方法


job1任務類

package org.quartz.examples.example9;

import java.util.Date;

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.JobKey;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * job1任務類
 */
public class SimpleJob1 implements Job {

    private static Logger LOG = LoggerFactory.getLogger(SimpleJob1.class);

    // 必須要有public修飾的無參構造函數
    public SimpleJob1() {
    }

    // 定時器執行方法
    public void execute(JobExecutionContext context) throws JobExecutionException {
        JobKey jobKey = context.getJobDetail().getKey();
        LOG.info("---------- 作業1執行。SimpleJob1 says: " + jobKey + " executing at " + new Date());
    }

}

 

job2任務類

package org.quartz.examples.example9;

import java.util.Date;

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.JobKey;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * job2任務類
 */
public class SimpleJob2 implements Job {

    private static Logger LOG = LoggerFactory.getLogger(SimpleJob2.class);

    // 必須要有public修飾的無參構造函數
    public SimpleJob2() {
    }

    // 定時器執行方法
    public void execute(JobExecutionContext context) throws JobExecutionException {
        JobKey jobKey = context.getJobDetail().getKey();
        LOG.info("---------- 作業2執行。SimpleJob2 says: " + jobKey + " executing at " + new Date());
    }

}

 


job1任務監聽器

package org.quartz.examples.example9;

import static org.quartz.JobBuilder.newJob;
import static org.quartz.TriggerBuilder.newTrigger;

import org.quartz.JobDetail;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.JobListener;
import org.quartz.SchedulerException;
import org.quartz.Trigger;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * job1任務監聽器
 */
public class Job1Listener implements JobListener {

    private static Logger LOG = LoggerFactory.getLogger(Job1Listener.class);

    public String getName() {
        return "job1_to_job2";
    }

    public void jobToBeExecuted(JobExecutionContext inContext) {
        LOG.info("Job1Listener says: 作業即將執行.");
    }

    //當org.quartz被調度程序調用時。JobDetailwas即將執行(一個關聯的Triggerhas發生),但是TriggerListener否決了它的執行。
    public void jobExecutionVetoed(JobExecutionContext inContext) {
        LOG.info("Job1Listener says: 作業執行被否決.");
    }

    public void jobWasExecuted(JobExecutionContext inContext, JobExecutionException inException) {
        LOG.info("Job1Listener says: 作業已執行.");
        // Simple job #2
        JobDetail job2 = newJob(SimpleJob2.class).withIdentity("job2").build();
        Trigger job2Trigger = newTrigger().withIdentity("job2Trigger").startNow().build();

        try {
            //去執行job2
            inContext.getScheduler().scheduleJob(job2, job2Trigger);
        } catch (SchedulerException e) {
            LOG.warn("Unable to schedule job2!");
            e.printStackTrace();
        }

    }

}

 

調度器類

 

package org.quartz.examples.example9;

import static org.quartz.JobBuilder.newJob;
import static org.quartz.TriggerBuilder.newTrigger;

import org.quartz.JobDetail;
import org.quartz.JobKey;
import org.quartz.JobListener;
import org.quartz.Matcher;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.SchedulerMetaData;
import org.quartz.Trigger;
import org.quartz.impl.StdSchedulerFactory;
import org.quartz.impl.matchers.KeyMatcher;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 演示job任務添加監聽器,監聽任務執行前、后手動處理方法
 */
public class ListenerExample {
    Logger LOG = LoggerFactory.getLogger(ListenerExample.class);

  public void run() throws Exception {
    // 初始化一個調度工廠,並實例化一個調度類
    SchedulerFactory sf = new StdSchedulerFactory();
    Scheduler sched = sf.getScheduler();

    // 作業將被立即執行
    JobDetail job = newJob(SimpleJob1.class).withIdentity("job1").build();
    Trigger trigger = newTrigger().withIdentity("trigger1").startNow().build();
    // 設置job1任務監聽器
    JobListener listener = new Job1Listener();
    Matcher<JobKey> matcher = KeyMatcher.keyEquals(job.getKey());
    sched.getListenerManager().addJobListener(listener, matcher);
    sched.scheduleJob(job, trigger);
    
    sched.start();

    LOG.info("------- Waiting 30 seconds... --------------");
    Thread.sleep(30L * 1000L);

    sched.shutdown(true);
    LOG.info("------- Shutdown Complete -----------------");

    SchedulerMetaData metaData = sched.getMetaData();
    LOG.info("Executed " + metaData.getNumberOfJobsExecuted() + " jobs.");

  }

  public static void main(String[] args) throws Exception {

    ListenerExample example = new ListenerExample();
    example.run();
  }

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM