六、Quartz监听器

监听器

JobListener

@Log4j
public class MyJobListener implements JobListener {
    @Override
    public String getName() {
        return "my-job-listener";
    }

    @Override
    public void jobToBeExecuted(JobExecutionContext context) {
        log.info("----任务执行之前进入此方法----");
    }

    @Override
    public void jobExecutionVetoed(JobExecutionContext context) {
        log.info("----任务被TriggerListener拒绝执行之后进入此方法----");
    }

    @Override
    public void jobWasExecuted(JobExecutionContext context, JobExecutionException jobException) {
        log.info("----任务执行之后进入此方法----");
    }
}

TriggerListener

@Log4j
public class MyTriggerListener implements TriggerListener {
    @Override
    public String getName() {
        return "my-trigger-listener";
    }

    @Override
    public void triggerFired(Trigger trigger, JobExecutionContext context) {
        log.info("任务即将被执行前,触发调用");
    }

    @Override
    public boolean vetoJobExecution(Trigger trigger, JobExecutionContext context) {
        log.info("如果返回true,则否决掉本次jobDetail的执行");
        return false;
    }

    @Override
    public void triggerMisfired(Trigger trigger) {
        log.info("如果任务misfired(未执行),则调用本方法");
    }

    @Override
    public void triggerComplete(Trigger trigger, JobExecutionContext context, Trigger.CompletedExecutionInstruction triggerInstructionCode) {
        log.info("触发执行结束时调用");
    }
}

调度

        JobDetail jobDetail = JobBuilder.newJob(MySpringQuartzJob.class)
                .withIdentity("job-2")
                .build();

        Trigger trigger = TriggerBuilder.newTrigger()
                .withIdentity("trigger-2")
                .withSchedule(SimpleScheduleBuilder.repeatSecondlyForever(30))
                .startNow()
                .build();

        scheduler.getListenerManager().addJobListener(
                new MyJobListener(), KeyMatcher.keyEquals(jobDetail.getKey())
        );

        scheduler.getListenerManager().addTriggerListener(
                new MyTriggerListener(),
                AndMatcher.and(
                        KeyMatcher.keyEquals(trigger.getKey()),
                        GroupMatcher.groupEquals(Key.DEFAULT_GROUP)
                )
        );

        scheduler.scheduleJob(jobDetail, trigger);

Matcher

请添加图片描述

JobDetail jobDetail = JobBuilder.newJob(MySpringQuartzJob.class)

.withIdentity("job-2")

.requestRecovery() // 仅对jdbc持久化方式生效,如果任务中途挂掉,比如宕机了,下次重启服务器自动执行

.build();

Trigger trigger = TriggerBuilder.newTrigger()

.withIdentity("trigger-2")

.withSchedule(SimpleScheduleBuilder.repeatSecondlyForever(30))

.startNow()

.modifiedByCalendar("holidays")

.withPriority(5)

.build();

scheduler.getListenerManager().addJobListener(

new MyJobListener(), KeyMatcher.keyEquals(jobDetail.getKey())

);

scheduler.getListenerManager().addTriggerListener(

new MyTriggerListener(),

AndMatcher.and(

KeyMatcher.keyEquals(trigger.getKey()),

GroupMatcher.groupEquals(Key.DEFAULT\_GROUP)

)

);

scheduler.scheduleJob(jobDetail, trigger);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Quartz是功能强大的开源作业调度库,几乎可以集成到任何Java应用程序中-从最小的独立应用程序到最大的电子商务系统。Quartz可用于创建简单或复杂的计划,以执行数以万计,数以万计的工作。任务定义为标准Java组件的作业,它们实际上可以执行您可以对其执行的任何编程操作。Quartz Scheduler包含许多企业级功能,例如对JTA事务和集群的支持。 Quartz是免费使用的,并根据Apache 2.0许可获得许可。 Quartz作业调度的示例用法: 1、推动流程工作流程:最初下达新订单时,安排一个Job在正好2个小时内触发,这将检查该订单的状态,并在尚未收到该订单的订单确认消息时触发警告通知,并将订单状态更改为“等待干预”。 2、系统维护:计划一个工作,以便在每个工作日(除节假日以外的所有工作日)晚上11:30将数据库的内容转储到XML文件中。 3、在应用程序内提供提醒服务。 Quartz特征: 一、运行环境 1、Quartz可以嵌入另一个独立应用程序中运行 2、Quartz可以在应用服务器(或servlet容器)中实例化,并参与XA事务 3、Quartz可以作为独立程序运行(在其自己的Java虚拟机中),可以通过RMI使用 4、Quartz可以实例化为独立程序的集群(具有负载平衡和故障转移功能),以执行作业 二、作业调度 计划在给定触发器发生时运行作业。几乎可以使用以下指令的任意组合来创建触发器: 1、在一天中的特定时间(以毫秒为单位) 2、在一周的某些日子 3、在每月的某些天 4、在一年中的某些日子 5、不在注册日历中列出的某些日期(例如工作日) 6、重复特定的次数 7、重复直到特定的时间/日期 8、无限重复 9、延迟间隔重复 作业由其创建者命名,也可以分为命名组。还可以给触发器指定名称并将其分组,以便在调度程序中轻松组织触发器。作业可以一次添加到调度程序,但可以通过多个触发器注册。在企业Java环境中,乔布斯可以将其工作作为分布式(XA)事务的一部分进行。 三、工作执行 1、Jobs可以是实现简单Job接口的任何Java类,为Jobs可以执行的工作留下无限的可能性。 2、作业类实例可以由Quartz或由您的应用程序的框架实例化。 3、发生触发器时,调度程序会通知零个或多个实现JobListener和TriggerListener接口的Java对象(侦听器可以是简单的Java对象,EJB或JMS发布者,等等)。作业执行后,也会通知这些侦听器。 4、作业完成后,它们将返回JobCompletionCode,以通知调度程序成功或失败。JobCompletionCode还可以根据成功/失败代码指示调度程序应采取的任何操作,例如立即重新执行Job。 四、工作持久性 1、Quartz的设计包括一个JobStore接口,可以实现该接口以提供用于存储作业的各种机制。 2、通过使用随附的JDBCJobStore,所有配置为“非易失性”的作业和触发器都将通过JDBC存储在关系数据库中。 3、通过使用随附的RAMJobStore,所有作业和触发器都存储在RAM中,因此不会在程序执行之间持久存在-但这具有不需要外部数据库的优点。 五、交易次数 1、Quartz可以通过使用JobStoreCMT(JDBCJobStore的子类)来参与JTA事务。 2、Quartz可以在Job执行过程中管理JTA事务(开始并提交它们),以便Job所执行的工作自动在JTA事务中进行。 、聚类 1、故障转移。 2、负载均衡。 3、Quartz的内置集群功能依赖于通过JDBCJobStore进行数据库持久化(如上所述)。 4、Quartz的Terracotta扩展无需群集数据库即可提供群集功能。 七、听众和插件: 1、应用程序可以通过实现一个或多个侦听器接口来捕获调度事件,以监视或控制作业/触发器的行为。 2、可以使用Plug-In机制为Quartz添加功能,例如保留作业执行的历史记录,或从文件加载作业和触发器定义。 3、Quartz附带了许多“工厂内置”的插件和监听器
中文版目录总汇及内容提要 第一章. 企业应用中的作业调度 内容提要:什么是作业调度,作业调度为什么说是重要的,企业应用中的作业调度,非企业应用中的作业调度,作业调度与工作流,关于作业调度其他可选择方案 第二章. Quartz 起步 内容提要:本章对 Quartz 框架一个快速的入门介绍,同时也大略指导你从哪里下载,构建和安装这个框架 第三章. Hello Quartz (第一部分) 内容提要:建立 Hello Quartz 工程,并创建一个 Quartz Job 类 ScanDirectoryJob. 第三章. Hello Quartz (第二部分) 内容提要:创建一个 Quartz Scheduler,关联上一个 Quartz Trigger 以编程方式调度前面编写的 ScanDirectoryJob 运行。 第三章. Hello Quartz (第三部分) 内容提要:通过配置 quartz.properties、quartz_jobs.xml 以声明的方式调度 ScanDirectoryJob 运行。 第三章. Hello Quartz (第四部分) 内容提要:让我们最后简单讨论打包一个用到了 Quarts 框架的应用程序的流程,需要依赖于哪些包,也以此来结束本章的内容。 第四章. 部署 Job (第一部分) 内容提要:介绍 Scheduler 和 SchedulerFactory 有哪些类型、SchedulerFactory 的关键 API 方法;以及如何通过 java.util.Properties 实例或默认 quartz.properties 文件创建 Scheduler。 第四章. 部署 Job (第二部分) 内容提要:如何管理 Scheduler(启动、停止、Standby 模式)。还介绍了 Job、JobExecutionContext、JobDetail、JobDataMap,及如何访问 JobDataMap 中的数据。有状态和无状态的 Job。 第四章. 部署 Job (第三部分) 内容提要:Job 的易失性、持久性和可恢复性,如何从 Scheduler 中移除、中断 Job。Quartz 已为我们提供了哪些 Job。最后是 Java 线程的简单介绍。 第四章. 部署 Job (第四部分) 内容提要:线程在 Quartz 中的用法,主处理线程:QuartzSchedulerThread 和 Quartz 工作者线程。Quartz Trigger 和 Calendar 各有哪些类型和如何使用。 第五章. Cron 触发器及相关内容 (第一部分) 内容提要:引入 Quartz CronTrigger 及简单使用 CronTrigger 来部署一个 Job 第五章. Cron 触发器及相关内容 (第二部分) 内容提要:详细介绍了 cron 表达式的格式和像 , - * ? / L W C # 特殊符号的使用 第五章. Cron 触发器及相关内容 (第三部分) 内容提要:CronTrigger 使用起(startTime) 迄(endTime) 日期的使用。TriggerUtils 简单方便的创建 Trigger。应用 JobInitializationPlugin 在 quartz_jobs.xml 配置文件中写 Cron 表达式。 第五章. Cron 触发器及相关内容 (第四部分) 内容提要:Cron 表达式 Cookbook,列举了各种 Cron 表达式的写法和意义,有助于更好的理解 Cron 表达式;还用了 TriggerUtils 创建了一个即刻触发的 Trigger。 第章. Job 存储和持久化 (第一部分) 内容提要:介绍 Quartz 中的 Job 存储,JobStore 接口相关 API 方法。使用 RAMJobStore 来实现 Job 存储及它的优缺点。 第章. Job 存储和持久化 (第二部分) 内容提要:使用持久性的 JobStore,可用类型 JobStoreTX 和 JobStoreCMT。持久性 JobStore 是通过数据库来完成的,哪可支持哪些数据及需要创建些什么表。 第章. Job 存储和持久化 (第三部分) 内容提要:使用和配置 JobStoreTX,需要为不同数据库平台指定不同的驱动代理( DriverDelegate),和 quartz.properties 中与 JobStoreTX 相关配置说明。 第章. Job 存储和持久化 (第四部分) 内容提要:为 JobStoreTX 通过在 quartz.properties 配置来创建数据源,并在 Scheduler 中使用数据源 第章. Job 存储和持久化 (第五部分

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值