Job1类

package org.quartz.examples.example6;

import org.quartz.DisallowConcurrentExecution;
import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.JobKey;
import org.quartz.PersistJobDataAfterExecution;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import java.util.Date; /**
* <p>
* 一个会引发作业执行异常的作业
* </p>
*/
@PersistJobDataAfterExecution // 持久化JobDataMap里的数据,使下一个定时任务还能获取到这些值
@DisallowConcurrentExecution // 禁止并发多任务执行,所以永远只有一个任务在执行中
public class BadJob1 implements Job { // Logging
private static Logger LOG = LoggerFactory.getLogger(BadJob1.class);
private int calculation; //必须要有public修饰的无参构造函数
public BadJob1() {
} //定时器执行方法
public void execute(JobExecutionContext context) throws JobExecutionException {
JobKey jobKey = context.getJobDetail().getKey();
JobDataMap dataMap = context.getJobDetail().getJobDataMap(); int denominator = dataMap.getInt("denominator");
LOG.info("---" + jobKey + " executing at " + new Date() + " with denominator " + denominator); // 一个人为设计的异常示例,该异常将由该作业生成,原因是除0错误(仅在第一次运行时)
try {
calculation = 4815 / denominator;
} catch (Exception e) {
LOG.info("--- Error in job!");
JobExecutionException e2 = new JobExecutionException(e); // 修正分母,以便下次作业运行时不会再次失败
dataMap.put("denominator", "1"); // 是否立即重新触发任务?true
e2.setRefireImmediately(true);
throw e2;
} LOG.info("---" + jobKey + " completed at " + new Date());
} }

Job2类

package org.quartz.examples.example6;

import java.util.Date;

import org.quartz.DisallowConcurrentExecution;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.JobKey;
import org.quartz.PersistJobDataAfterExecution;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory; /**
* <p>
* 一个会引发作业执行异常的作业
* </p>
*/
@PersistJobDataAfterExecution // 持久化JobDataMap里的数据,使下一个定时任务还能获取到这些值
@DisallowConcurrentExecution // 禁止并发多任务执行,所以永远只有一个任务在执行中
public class BadJob2 implements Job { // Logging
private static Logger LOG = LoggerFactory.getLogger(BadJob2.class);
private int calculation; // 必须要有public修饰的无参构造函数
public BadJob2() {
} // 定时器执行方法
public void execute(JobExecutionContext context) throws JobExecutionException {
JobKey jobKey = context.getJobDetail().getKey();
LOG.info("---" + jobKey + " executing at " + new Date()); // 一个人为设计的异常示例,该异常将由该作业由于除零错误而生成
try {
int zero = 0;
calculation = 4815 / zero;
} catch (Exception e) {
LOG.info("--- Error in job!");
JobExecutionException e2 = new JobExecutionException(e);
// Quartz将自动取消与此作业关联的所有触发器的调度,这样它就不会再次运行
e2.setUnscheduleAllTriggers(true);
throw e2;
} LOG.info("---" + jobKey + " completed at " + new Date());
} }

任务调度类

package org.quartz.examples.example6;

import static org.quartz.DateBuilder.nextGivenSecondDate;
import static org.quartz.JobBuilder.newJob;
import static org.quartz.SimpleScheduleBuilder.simpleSchedule;
import static org.quartz.TriggerBuilder.newTrigger; import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.SchedulerMetaData;
import org.quartz.SimpleTrigger;
import org.quartz.impl.StdSchedulerFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import java.util.Date; /**
* 这个作业演示了Quartz如何处理作业抛出的JobExecutionExceptions
*/
public class JobExceptionExample {
Logger LOG = LoggerFactory.getLogger(JobExceptionExample.class); public void run() throws Exception {
// 初始化一个调度工厂,并实例化一个调度类
SchedulerFactory sf = new StdSchedulerFactory();
Scheduler sched = sf.getScheduler(); // 第一个参数:null就是默认当前时间,也可以指定时间
// 第二个参数:把一分钟按15进行划分,也就是60/15等份。
// 举例:当前时间是21:01:27,那么startTime就是21:15:00。当前时间是21:35:32,那么startTime就是21:45:00。
Date startTime = nextGivenSecondDate(null, 15); // ========================================================
// ============ badJob1将每10秒运行一次,此作业将抛出异常并立即重新启动。
// ========================================================
JobDetail job = newJob(BadJob1.class).withIdentity("badJob1", "group1").usingJobData("denominator", "0")
.build();
// 触发器每间隔10秒执行一次,无限循环
SimpleTrigger trigger = newTrigger().withIdentity("trigger1", "group1").startAt(startTime)
.withSchedule(simpleSchedule().withIntervalInSeconds(10).repeatForever()).build();
Date ft = sched.scheduleJob(job, trigger);
LOG.info(job.getKey() + " will run at: " + ft + " and repeat: " + trigger.getRepeatCount() + " times, every "
+ trigger.getRepeatInterval() / 1000 + " seconds"); // ========================================================
// ============ badJob2将每5秒运行一次,此作业将抛出异常,在异常catch块里取消了使用该任务触发器的所有任务的触发,并且永不重新启动。
// ========================================================
JobDetail job2 = newJob(BadJob2.class).withIdentity("badJob2", "group1").build();
// 触发器每间隔5秒执行一次,无限循环
SimpleTrigger trigger2 = newTrigger().withIdentity("trigger2", "group1").startAt(startTime)
.withSchedule(simpleSchedule().withIntervalInSeconds(5).repeatForever()).build();
Date ft2 = sched.scheduleJob(job2, trigger2);
LOG.info(job2.getKey() + " will run at: " + ft2 + " and repeat: " + trigger2.getRepeatCount() + " times, every "
+ trigger2.getRepeatInterval() / 1000 + " seconds"); sched.start();
Thread.sleep(30L * 1000L);
sched.shutdown(false);
LOG.info("------- Shutdown Complete -----------------"); SchedulerMetaData metaData = sched.getMetaData();
LOG.info("Executed " + metaData.getNumberOfJobsExecuted() + " jobs.");
} public static void main(String[] args) throws Exception { JobExceptionExample example = new JobExceptionExample();
example.run();
} }

quartz2.3.0(六)job任务异常处理方式的更多相关文章

  1. quartz2.3.0(十)xml配置方式定义quartz定时任务

    1.新增pom依赖 除了按照<quartz2.3.0系列目录——带您由浅入深全面掌握quartz2.3.0>添加依赖之外,pom.xml里新增加依赖: <dependency> ...

  2. quartz2.3.0系列目录——带您由浅入深全面掌握quartz2.3.0

    quartz2.3.0系列目录 官网下载地址:http://www.quartz-scheduler.org/downloads/ 本系列demo全部来源于官网,仅仅是简化和汉化了注释!一部分代码de ...

  3. JAVA异常及其异常处理方式

    异常处理 异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的.比如说,你的代码少了一个分号,那么运行出来结果是提示是错误 java.lang.Error:如果你用Syste ...

  4. CobalStrike 4.0 生成后门几种方式 及 主机上线后基础操作

    出品|MS08067实验室(www.ms08067.com) 本文作者:BlackCat(Ms08067内网安全小组成员) CobalStrike 4.0 生成后门几种方式 步骤:Attacks-〉P ...

  5. 一文带你掌握Spring Web异常处理方式

    一.前言 大家好,我是 去哪里吃鱼 ,也叫小张. 最近从单位离职了,离开了五年多来朝朝夕夕皆灯火辉煌的某网,激情也好悲凉也罢,觥筹场上屡屡物是人非,调转过事业部以为能换种情绪,岂料和下了周五的班的前同 ...

  6. spring3.2.8+quartz2.2.0(比较全,对比quartz1.x的配置)

    spring3.2.8 + quartz2.2.0报错: java.lang.IncompatibleClassChangeError: class org.springframework.sched ...

  7. Java_IO异常处理方式_入门小笔记

    package IO; import java.io.FileWriter; import java.io.IOException; /** * IO异常处理方式 */ class FileWrite ...

  8. SpringBoot学习15:springboot异常处理方式5(通过实现HandlerExceptionResolver类)

    修改异常处理方式4中的全局异常处理controller package com.bjsxt.exception; import org.springframework.context.annotati ...

  9. SpringMVC 三种异常处理方式

    SpringMVC 三种异常处理方式 在 SpringMVC, SpringBoot 处理 web 请求时, 若遇到错误或者异常,返回给用户一个良好的错误信息比 Whitelabel Error Pa ...

  10. quartz2.3.0(十三)数据库持久化定时器job任务和trigger触发器,在多个调度器实例情况下,由其它调度器实例恢复执行调度器宕机的job任务

    一.初始化数据库11张quartz表:qrtz_*   先从官网下载好quartz2.3.0包:http://www.quartz-scheduler.org/downloads/ 解压后进入目录:q ...

随机推荐

  1. Serlvet开发

    javaweb学习总结(五)——Servlet开发(一) 一.Servlet简介 Servlet是sun公司提供的一门用于开发动态web资源的技术. Sun公司在其API中提供了一个servlet接口 ...

  2. git常用命名:自用,持续更新

    1.切换分支 git checkout -b dev origin/feature/迭代1.1 2.提交本地代码到github git init //初始化git git config --globa ...

  3. php常用命令

    --------------------------------------------------------------- 重启phpservice php-fpm restart ------- ...

  4. Activiti task claim

    Activiti task claim claim,认领,领取 claim - 国内版 Bing https://cn.bing.com/search?FORM=U227DF&PC=U227& ...

  5. PHP session_start() open failed: Permission denied session 无法使用的问题

    日志显示报错如下: PHP message: PHP Warning: session_start(): open(/) 报错显示无法打开 seesion 文件,没有权限,所以需要给 /var/lib ...

  6. python3新特性函数注释Function Annotations用法分析

    本文分析了python3新特性函数注释Function Annotations用法.分享给大家供大家参考,具体如下: Python 3.X新增加了一个特性(Feature),叫作函数注释 Functi ...

  7. CFCA证书工具类

    jar:com.cfca.pkibase-1.0.jar import java.io.UnsupportedEncodingException; import java.security.Secur ...

  8. server2008r2 安装CentOS

    一:安装CentOS 二:配置虚拟网络: 三:设置创建的虚拟机使用刚才创建的网卡: 四:运行CentOs,输入用户:root  密码:root,登录后输入: dhclient   自动获取IP ip ...

  9. CDH集群手动导入scm库

    一.手动导入 scm 库 背景:正常安装 cloudera-scm-server 时,安装 scm 库是通过脚本 /usr/share/cmf/schema/scm_prepare_database. ...

  10. JS字符串数字前面加加号会变成数字类型

    JS中一个字符串中只有数字,如果该字符串前面加了个加号,这个数值就变成了number类型.如本文测试中,用lodop打印二维码,最后一个参数是一个字符串,在前面加了加号和不在前面加加号,通过控制台输出 ...