quartz2.3.0(六)job任务异常处理方式
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任务异常处理方式的更多相关文章
- quartz2.3.0(十)xml配置方式定义quartz定时任务
1.新增pom依赖 除了按照<quartz2.3.0系列目录——带您由浅入深全面掌握quartz2.3.0>添加依赖之外,pom.xml里新增加依赖: <dependency> ...
- quartz2.3.0系列目录——带您由浅入深全面掌握quartz2.3.0
quartz2.3.0系列目录 官网下载地址:http://www.quartz-scheduler.org/downloads/ 本系列demo全部来源于官网,仅仅是简化和汉化了注释!一部分代码de ...
- JAVA异常及其异常处理方式
异常处理 异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的.比如说,你的代码少了一个分号,那么运行出来结果是提示是错误 java.lang.Error:如果你用Syste ...
- CobalStrike 4.0 生成后门几种方式 及 主机上线后基础操作
出品|MS08067实验室(www.ms08067.com) 本文作者:BlackCat(Ms08067内网安全小组成员) CobalStrike 4.0 生成后门几种方式 步骤:Attacks-〉P ...
- 一文带你掌握Spring Web异常处理方式
一.前言 大家好,我是 去哪里吃鱼 ,也叫小张. 最近从单位离职了,离开了五年多来朝朝夕夕皆灯火辉煌的某网,激情也好悲凉也罢,觥筹场上屡屡物是人非,调转过事业部以为能换种情绪,岂料和下了周五的班的前同 ...
- spring3.2.8+quartz2.2.0(比较全,对比quartz1.x的配置)
spring3.2.8 + quartz2.2.0报错: java.lang.IncompatibleClassChangeError: class org.springframework.sched ...
- Java_IO异常处理方式_入门小笔记
package IO; import java.io.FileWriter; import java.io.IOException; /** * IO异常处理方式 */ class FileWrite ...
- SpringBoot学习15:springboot异常处理方式5(通过实现HandlerExceptionResolver类)
修改异常处理方式4中的全局异常处理controller package com.bjsxt.exception; import org.springframework.context.annotati ...
- SpringMVC 三种异常处理方式
SpringMVC 三种异常处理方式 在 SpringMVC, SpringBoot 处理 web 请求时, 若遇到错误或者异常,返回给用户一个良好的错误信息比 Whitelabel Error Pa ...
- quartz2.3.0(十三)数据库持久化定时器job任务和trigger触发器,在多个调度器实例情况下,由其它调度器实例恢复执行调度器宕机的job任务
一.初始化数据库11张quartz表:qrtz_* 先从官网下载好quartz2.3.0包:http://www.quartz-scheduler.org/downloads/ 解压后进入目录:q ...
随机推荐
- 限流神器之-Guava RateLimiter 实战
前段时间,项目中需要对某些访问量较高的路径进行访问并发数控制,以及有些功能,比如Excel导出下载功能,数据量很大的情况下,用户不断的点击下载按钮,重复请求数据库,导致线上数据库挂掉.于是在这样的情况 ...
- mysql sum()函数 , 计算总和
mysql> select * from table1; +----------+------------+-----+---------------------+ | name_new | t ...
- 【POJ2632】Crashing Robots
题目传送门 本题知识点:模拟 模拟机器人的运作过程,分别有三种功能,L 则是左转90°,R 则是右转90°,L 则是前进1格.让我们去模拟并判断它们的状态. 输入: 第一行是测试样例 第二行分别是矩形 ...
- Android中LayoutInflater()方法
在实际开发中LayoutInflater这个类还是非常有用的,它的作用类似于findViewById().不同点是LayoutInflater是用来找res/layout/下的xml布局文件,并且实例 ...
- hbase 整合ranger
一.安装hbase插件 1.解压安装插件 从target目录下拷贝ranger-2.1.0-SNAPSHOT-hbase-plugin.tar.gz到hbase集群,你的这个包的版本可能跟我不一致. ...
- 【算法编程 C++ Python】字符串替换
题目描述 请实现一个函数,将一个字符串中的空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. C++使用string,pyt ...
- Dolly
dolly - 必应词典 美['dɑli]英['dɒli] n.洋娃娃:(搬运重物的)台车 v.用独轮车运(物):用搅拌棒洗(衣):用捣棒捣碎(矿石) 网络多莉:多利:移动式摄影小车 变形复数:dol ...
- PostgreSQL中的The Oversized-Attribute Storage Technique(TOAST:超大属性存储技术)
PostgreSQL使用固定的页面大小(通常为8kB),并且不允许元组跨越多个页面.因此,不可能直接存储非常大的字段值.为了克服这种限制,将大字段值压缩和/或分解成多个物理行.这对用户来说是透明的,对 ...
- [转]vscode 插件推荐 - 献给所有前端工程师(2019.8.7更新)
原文地址:https://segmentfault.com/a/1190000006697219 VScode现在已经越来越完善.性能远超Atom和webstorm,你有什么理由不用它?在这里,我会给 ...
- Python3基础 yield 创建生成器
Python : 3.7.3 OS : Ubuntu 18.04.2 LTS IDE : pycharm-community-2019.1.3 ...