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();
  }

}

原文地址:https://www.cnblogs.com/zhuwenjoyce/p/11186510.html

时间: 2024-08-29 22:45:10

quartz2.3.0(九)job任务监听器,监听任务执行前、后、取消手动处理方法的相关文章

angular指令监听ng-repeat渲染完成后执行自定义事件方法

今天工作中遇到需要用到ng-repeat遍历渲染完后执行某个操作,angular本身并没有提供监听ng-repeat渲染完成的指令,所以需要自己创建自定义指令. 在ng-repeat模板实例内部会暴露出一些特殊属性$index/$first/$middle/$last/$odd/$even,$index会随着每次遍历(从0开始)递增,当遍历到最后一个时,$last的值为true,所以可以通过判断$last的值来监听ng-repeat的执行状态, 怎么在遍历过程中拿到$last的值:自定义指令 v

【转】Android开发20——单个监听器监听多个按钮点击事件

原文网址:http://woshixy.blog.51cto.com/5637578/1093936 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://woshixy.blog.51cto.com/5637578/1093936 一.单个按钮点击事件的监听 方法一 /** * 从网络上获取图片 * * @author 徐越 * */ public class MainActivity extends Activity { pri

Unity NGUI监听按钮点击事件的三种方法

NGUI版本:3.6.5 1.直接实现OnClick方法: 创建一个脚本,在脚本中实现OnClick()方法,绑定该脚本到按钮上,点击时就会实现OnClick函数内容: 2.使用SendMessage: 选择按钮后,打开Component——NGUI——Interaction,选择Button Message,为按钮添加一个UIButton Message组件: 然后设置UIButton Message中的参数即可: Target:接收按钮消息的游戏对象: Function Name:接收按钮消

Android监听点击事件实现的三种方法

监听点击事件实现的三种方法:1.匿名内部类2.外部类3.直接实现接口 1.匿名内部类: package com.jereh.calculator; import android.content.Context; import android.os.Bundle; import android.os.PersistableBundle; import android.support.design.widget.FloatingActionButton; import android.support

利用angular指令监听ng-repeat渲染完成后执行脚本

业务中有时需要在异步获取数据并用ng-repeat遍历渲染完页面后执行某个操作,angular本身并没有提供监听ng-repeat渲染完成的指令,所以需要自己动手写.有经验的同学都应该知道,在ng-repeat模板实例内部会暴露出一些特殊属性$index/$first/$middle/$last/$odd/$even,$index会随着每次遍历(从0开始)递增,当遍历到最后一个时,$last的值为true,so,通过判断$last的值来监听ng-repeat的执行状态,怎么在遍历过程中拿到$la

Win7/Vista/Server2008下VS 环境 调试调用 HTTP.SYS 无法启动监听服务及启动后其他机器无法访问端口

一. VS调试在Win7(vista系列)操作系统下 HttpListener无法绑定多个 指定IP.端口问题 来自:http://www.cnblogs.com/ryhan/p/4195693.html 现象:System.Net.HttpListenerException (0x80004005): 拒绝访问. 原因:VS IDE 权限不够(生成的产物权限也会不够),提升UAC权限即可解决 步骤: 1.选中对应Project,右键添加->新增应用程序清单文件 app.manifest 2.将

使用jQuery监听扫码枪输入并禁止手动输入的实现方法

基于jQuery的扫码枪监听.如果只是想实现监听获取条码扫码信息,可以直接拿来使用,如果有更多的条码判断处理逻辑需要自己扩展.一.功能需求 使用扫码枪扫描条码,在一个web页面监听获取扫码枪的数据,并禁止用户进行手动的输入操作. 开始的想法非常简单,因为扫码枪就是模拟键盘的输入,当他用usb接口插入电脑的时候,就变成了一个外接的输入设备,用js监听就可以了.但是如何判断用户是否为手动输入就需要做一些处理了.二.主要问题 1.如何判断是否手动输入 2.如何判断一个条码输入完成三.解决方案 手动输入

JS监听checkbox的选择获取取消事件代码案列

function OncheckBox(index){ if ($(index).attr("checked") == "checked") { alert($(index).val()); alert("选中"); } //取消 else { alert("取消"); } } <input type="checkbox" id="payTypes1" name="pay

java事件响应方法汇总(容器类监听、监听器类、AbstractAction、反射)

Java图形用户界面中,处理事件时所必须的步骤是: 1.创建接受响应的组件(控件)2.实现相关事件监听接口3.注册事件源的动作监听器4.事件触发时的事件处理 相应的可以通过以下的集中方式来作出事件响应. [java] view plaincopyprint? <span style="font-size: 18px;">一.容器类监听 效果:单击窗体中的三个按钮,实现相应的相应时间. </span><pre class="java" n