quartz

设置参数, 获取参数

在job中使用spring注入的service对象

循环获取所有的job

删除job

@PersistJobDataAfterExecution

@DisallowConcurrentExecution

maven 中添加依赖

  <dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.1</version>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz-jobs</artifactId>
<version>2.2.1</version>
</dependency>

quartz 的 API 设计使用 domain-specific language (DSL),  写起来十分的流畅, 可读性高。 写之前先导入类方便IDE联想:

  import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.impl.StdSchedulerFactory;
import static org.quartz.JobBuilder.*;
import static org.quartz.TriggerBuilder.*;
import static org.quartz.SimpleScheduleBuilder.*;

使用:

    @Test
public void test4() throws SchedulerException {
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
JobDetail job1 = newJob(JobTest1.class)
// 第一个参数name: job名称,job的唯一标志如果一个job未执行完继续使用同名的jobName会报错,
// 第二个参数group:分组名称,用于逻辑处理
.withIdentity("test1", "test1Group").build();
Trigger trigger1 = newTrigger()
.withIdentity("test1", "test1Group")
.usingJobData("name", "scott") //设置参数,在JobTest1类中取用
.usingJobData("gender","male")
.startNow() // 立即执行
.withSchedule(simpleSchedule() //通过simpleSchedule定时, 有很多种类,比如cron等等
.withIntervalInSeconds(60) //每60秒执行一次, 单位可设置为分,时,秒,毫秒
.withRepeatCount(2)) // 执行次数设置为2次,应为立即执行了一次, 所以实际执行此时是withRepeatCount+1次
.build(); JobDataMap jobDataMap = new JobDataMap();
jobDataMap.put("name", "scott");
JobDetail job2 = newJob(JobTest2.class)
.withIdentity("test2", "test2Group")
.usingJobData(jobDataMap)
.build();
Trigger trigger2 = newTrigger()
.withIdentity("test2", "test2Group")
.startNow()
.withSchedule(simpleSchedule()
.withIntervalInSeconds(20)
.repeatForever()) // 奔流到海不复回
.build(); scheduler.scheduleJob(job1, trigger1);
scheduler.scheduleJob(job2, trigger2);
scheduler.start();
}

JobTest1代码

package com.quartz;

import org.quartz.*;

public class JobTest1 implements Job {

    @Override
public void execute(JobExecutionContext context) throws JobExecutionException {
JobDataMap jobDataMap = context.getMergedJobDataMap();
String name = jobDataMap.getString("name"); //获取参数
int gender = jobDataMap.getIntValue("gender");
System.out.println(name+gender);
}
}

JobTest2 的代码:

package com.quartz;

import com.service.device.DeviceService;
import org.quartz.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.context.support.SpringBeanAutowiringSupport; @PersistJobDataAfterExecution
@DisallowConcurrentExecution
public class JobTest2 implements Job {
@Autowired
private DeviceService deviceService; @Override
public void execute(JobExecutionContext context) {
SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this); //在非spring托管的类中使用spring的对象
Integer result = deviceService.selectIdBydeviceCode("154653468"); //调用service层方法向数据库中查询数据
System.out.println(result); JobDataMap jobDataMap = context.getMergedJobDataMap();
String name = jobDataMap.getString("name");
System.out.println(name); //获取设置的参数 SimpleTrigger trigger = (SimpleTrigger) context.getTrigger();
int times = trigger.getTimesTriggered(); //获取当前执行次数
System.out.println("我是job2第"+times+"次运行");
}
}

循环所有的job, 删除指定job

   @Test
public void testQuartz1() {
try {
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
for (String groupName : scheduler.getJobGroupNames()) {
for (JobKey jobKey : scheduler.getJobKeys(GroupMatcher.jobGroupEquals(groupName))) {
String jobName = jobKey.getName();
String jobGroup = jobKey.getGroup();
List<Trigger> triggers = (List<Trigger>) scheduler.getTriggersOfJob(jobKey);
Date nextFireTime = triggers.get(0).getNextFireTime();
System.out.println(jobName + "第"+times+"次运行, 存在" + jobGroup + "组,距离下次到期时间" + nextFireTime);
if(jobName.equalsIgnoreCase("test2")) //删除job
scheduler.deleteJob(jobKey);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}

quartz 任务调度的更多相关文章

  1. 从零开始学 Java - Spring 使用 Quartz 任务调度定时器

    生活的味道 睁开眼看一看窗外的阳光,伸一个懒腰,拿起放在床一旁的水白开水,甜甜的味道,晃着尾巴东张西望的猫猫,在窗台上舞蹈.你向生活微笑,生活也向你微笑. 请你不要询问我的未来,这有些可笑.你问我你是 ...

  2. Quartz任务调度快速入门

    Quartz任务调度快速入门 概述 了解Quartz体系结构 Quartz对任务调度的领域问题进行了高度的抽象,提出了调度器.任务和触发器这3个核心的概念,并在org.quartz通过接口和类对重要的 ...

  3. Quartz任务调度

    狂神声明 : 文章均为自己的学习笔记 , 转载一定注明出处 ; 编辑不易 , 防君子不防小人~共勉 ! Quartz任务调度 课程目标 : 了解Quartz框架 : 任务(Job)  触发器(Trig ...

  4. Quartz任务调度实践

    最近在写一个任务调度程序,需要每隔几秒查询数据库,并取出数据做一些处理操作.使用到了Quartz任务调度框架. 基本概念 Quartz包含几个重要的对象,分别为任务(Job),触发器(Trigger) ...

  5. Quartz任务调度入门

    Quartz任务调度入门 了解Quartz体系结构Quartz对任务调度的领域问题进行了高度的抽象,提出了调度器.任务和触发器这3个核心的概念,并在org.quartz通过接口和类对重要的这些核心概念 ...

  6. Spring研磨分析、Quartz任务调度、Hibernate深入浅出系列文章笔记汇总

    Spring研磨分析.Quartz任务调度.Hibernate深入浅出系列文章笔记汇总 置顶2017年04月27日 10:46:45 阅读数:1213 这系列文章主要是对Spring.Quartz.H ...

  7. quartz任务调度初次使用记录

    近期公司开发的数据交换系统嵌入了quartz任务调度功能,大概了解了任务调度的整个流程,项目中需要用到它来进行定时任务操作,对数据定时检查以及及时交换. Quartz是OpenSymphony开源组织 ...

  8. (转)Quartz任务调度(1)概念例析快速入门

    http://blog.csdn.net/qwe6112071/article/details/50991563 Quartz框架需求引入 在现实开发中,我们常常会遇到需要系统在特定时刻完成特定任务的 ...

  9. Quartz任务调度 服务日志+log4net打印日志+制作windows服务

    引言 现在许多的项目都需要定时的服务进行支撑,而我们经常用到的定时服务就是Quartz任务调度了.不过我们在使用定时Job进行获取的时候,有时候我们就需要记录一下自定义的日志,甚至我们还会对执行定时J ...

  10. Quartz任务调度:MisFire策略和源码分析

    Quartz是为大家熟知的任务调度框架,先看看官网的介绍: ---------------------------------------------------------------------- ...

随机推荐

  1. 洛谷P2912 牧场散步Pasture Walking

    题目描述 The \(N\) cows (\(2 \leq N \leq 1,000\)) conveniently numbered \(1..N\) are grazing among the N ...

  2. linux替换文件中的某个字符串的命令sed

    sed -i 's/java-7-oracle/java-8-oracle/g' /etc/init.d/tomcat7 上面的命令是将tomcat7中的java-7-oracle替换为java-8- ...

  3. C# 连接oracle,用32位client和64位Client,可能导致结果不同

    在调用过程[pro_regentinitauth]时,有参数3-6为number类型,当我们用这样调用时,在32位client下,能正确得到输出参数3-6的结果为:1023, 但是,当我们把程序部署到 ...

  4. CQRS之旅——前言(翻译)

    探索CQRS和Event Sourcing 本项目聚焦在使用命令和查询分离模式和事件溯源(CQRS+Event Sourcing)构建一个具有高扩展,高可用和高维护性的应用程序. 本项目定位为一个学习 ...

  5. ci框架数据库相关函数

    返回查询影响的记录数 $res = $this->db->get_where('wx_life',array('id'=>$id)); $num = $res->num_row ...

  6. Code First 2

    在codefirst一中也说了Mapping是实体与数据库的纽带,model通过Mapping映射到数据库,我们可以从数据库的角度来分析?首先是映射到数据库,这个是必须的.数据库里面一般包括表.列.约 ...

  7. Jquery4

    w3s例子http://www.w3school.com.cn/jquery/event_keyup.asp Jquery插件 http://www.cnblogs.com/afuge/archive ...

  8. Servlet 示例

    引入jar包: servlet-api.jar ParameterServlet.java package com.mousewheel.springmvc; import java.io.IOExc ...

  9. There is much opportunity for anyone willing to dedicate himself to his labors.

    There is much opportunity for anyone willing to dedicate himself to his labors.付出努力的人才有机会出人头地.

  10. ios 12 xcode10 新升级的编译报错libstdc++.6.0.9 Multiple commands produce

    问题一 编译报错 Showing Recent Messages :-1: Multiple commands produce '/Users/duning/Library/Developer/Xco ...