任务类

package org.quartz.examples.example11;

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.JobKey;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import java.util.Date; /**
* job任务类
*/
public class SimpleJob implements Job { private static Logger LOG = LoggerFactory.getLogger(SimpleJob.class); // job parameter
public static final String DELAY_TIME = "delay time"; //必须要有public修饰的无参构造函数
public SimpleJob() {
} // 任务执行方法
public void execute(JobExecutionContext context) throws JobExecutionException { JobKey jobKey = context.getJobDetail().getKey();
LOG.info("执行任务开始:" + jobKey + " executing at " + new Date()); // 等待一段时间delayTime毫秒
long delayTime = context.getJobDetail().getJobDataMap().getLong(DELAY_TIME);
try {
Thread.sleep(delayTime);
} catch (Exception e) {
//
} LOG.info("执行任务结束:" + jobKey + " at " + new Date());
} }

调度器类

package org.quartz.examples.example11;

import static org.quartz.DateBuilder.futureDate;
import static org.quartz.JobBuilder.newJob;
import static org.quartz.TriggerBuilder.newTrigger; import org.quartz.DateBuilder.IntervalUnit;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.SchedulerMetaData;
import org.quartz.Trigger;
import org.quartz.impl.StdSchedulerFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory; /**
* 这个示例将生成大量要运行的作业
*/
public class LoadExample { // 初始化job任务个数
private int _numberOfJobs = 500; public LoadExample(int inNumberOfJobs) {
_numberOfJobs = inNumberOfJobs;
} public void run() throws Exception {
Logger LOG = LoggerFactory.getLogger(LoadExample.class); // 初始化一个调度工厂,并实例化一个调度类
SchedulerFactory sf = new StdSchedulerFactory();
Scheduler sched = sf.getScheduler(); // 计划运行500个作业
for (int count = 1; count <= _numberOfJobs; count++) {
// requestRecovery:请调度程序重新执行此作业,如果该作业在调度程序宕机时正在进行中…
//requestRecovery:指示调度程序,如果遇到“恢复”或“故障转移”情况,是否应重新执行作业。如果没有显式设置,则默认值为false
JobDetail job = newJob(SimpleJob.class).withIdentity("job" + count, "group_1").requestRecovery().build(); // 让工作人员推迟一点时间……模拟工作……
long timeDelay = (long) (java.lang.Math.random() * 2500);
job.getJobDataMap().put(SimpleJob.DELAY_TIME, timeDelay); //随机数 //每个触发器的启动时间都间隔100毫秒,相距时间非常短
Trigger trigger = newTrigger().withIdentity("trigger_" + count, "group_1")
.startAt(futureDate((10000 + (count * 100)), IntervalUnit.MILLISECOND))
.build(); sched.scheduleJob(job, trigger);
if (count % 25 == 0) {
LOG.info("...scheduled " + count + " jobs");
}
} sched.start();
LOG.info("------- Waiting one minutes... -----------"); // 等一分钟,展示job任务的定时打印
try {
Thread.sleep(60L * 1000L);
} catch (Exception e) {
//
} 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 { int numberOfJobs = 500;
if (args.length == 1) {
numberOfJobs = Integer.parseInt(args[0]);
}
if (args.length > 1) {
System.out.println("Usage: java " + LoadExample.class.getName() + "[# of jobs]");
return;
}
LoadExample example = new LoadExample(numberOfJobs);
example.run();
} }

quartz2.3.0(十一)任务执行中故障情况,可设置重新执行任务的更多相关文章

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

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

  2. Oracle 编写存储过程并设置定时执行

    Oracle 版本:11g PL/SQL 版本:11.0.3.1770 1.如果编写单个存储过程,则直接在procedure新建并编写:如果需要写多个同类功能的存储过程,为了方便管理,可以现在pack ...

  3. SQL SERVER中什么情况会导致索引查找变成索引扫描

    SQL Server 中什么情况会导致其执行计划从索引查找(Index Seek)变成索引扫描(Index Scan)呢? 下面从几个方面结合上下文具体场景做了下测试.总结.归纳. 1:隐式转换会导致 ...

  4. quartz2.3.0(十五)执行、暂停、继续执行、清除,花式操作数据库中持久化的job任务

    #################################################################################################### ...

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

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

  6. quartz2.3.0(五)制定错过执行任务的misfire策略,用pause,resume模拟job暂停执行和继续执行

    感谢兄台: <quartz-misfire 错失.补偿执行> misfire定义 misfire:被错过的执行任务策略 misfire重现——CronTrigger job任务类: pac ...

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

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

  8. 品味性能之道<十一>:JAVA中switch和if性能比较

    通常而言大家普遍的认知里switch case的效率高于if else.根据我的理解而言switch的查找类似于二叉树,if则是线性查找.按照此逻辑推理对于对比条件数目大于3时switch更优,并且对 ...

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

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

随机推荐

  1. 捷配制作PCB流程

    https://www.jiepei.com/orderprocess.html 以我的板子为例 查看下自己板子的信息 切换到mm 键盘 Q 压缩PCB文件 付款什么的自己哈 改天我有贴片的订单的时候 ...

  2. CF1237C2 【Balanced Removals (Harder)】

    这么妙的题怎么没人发题解啊 首先这是三维的,我们可以对其进行降维打击 先考虑一维怎么做? 我们可以对其该维坐标进行排序,按照顺序输出,可能会多余一个 那拓展到二维呢? 我们可以把它转化成一维,分成很多 ...

  3. Python3菜鸟教程笔记

    多行语句 同一行显示多条语句 Print 输出

  4. XMind配置防火墙

    1.打开控制面板,找到防火墙 2. 启用Windows防火墙 3.高级设置,新建入站规则 配置部分一律“下一步”. XMind配置防火墙完成.如果还不行,相同方式设置出站规则.

  5. SpringMVC(上)

    一.SpringMVC简介 (1)springMVC概述 Spring MVC属于SpringFrameWork的后续产品,Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块. 使用 ...

  6. Java_jdbc 基础笔记之九 数据库连接 (查询Customer对象的方法)

    /** * * 写一个查询Customer对象的方法 * */ public Customer getCustomer(String sql, Object... args) { Customer c ...

  7. 微信小程序开发:背景图片设置

    本文链接:https://blog.csdn.net/michael_f2008/article/details/86543134开发微信小程序时,不能直接在wxss文件里引用本地图片,运行时会报错: ...

  8. linux shell中如何批量添加一行内容到某些文件的末尾?

    答:先使用find找出要指定的某些文件,然后使用xargs和sed工具将内容插入到这些文件的末尾 find . -name 'filename*' | xargs sed -i '$a\added-c ...

  9. 微信小程序开发——base64位图片显示问题

    前言: 目前小程序项目需要后端借口提供验证码图片,后端是以base64位返回的,按照H5的做法,前边拼上 data:image/png;base64, 应该就可以了,关键代码如下: H5: <i ...

  10. Java之变量和数据类型

    变量 什么是变量 变量就是初中的代数的概念.例如一个简单的方程,x,y都是变量 y=x+1 在Java中,变量分为两种:基本类型的变量和引用类型的变量 在Java中,变量必须先定义后使用,在定义变量的 ...