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. shell编程 条件判断式----利用 if .... then ----多重

    条件判断式----利用 if .... then ----多重 在同一个数据的判断中,如果该数据需要进行多种不同的判断时,应该怎么作?举例来说,上面的 sh06.sh 脚本中,我们只要进行一次 $yn ...

  2. 6.计算字段 ---SQL

    提示:客户端与服务器的格式在SQL语句内可完成的许多转换和格式化工作都可以直接在客户端应用程序内完成.但一般来说,在数据库服务器上完成这些操作比在客户端中完成要快得多. 一.拼接字段 拼接(conca ...

  3. Codeforces 1165F2(二分内的check)

    要点 二分答案,内部喜闻乐见的拖延策略:对于某个打折玩具,就选最晚的打折时间买,答案并不会变劣,只是购买时间的平移. 注意最晚时间不是预处理的东西,是二分内部的.在mid以内的最晚时间. #inclu ...

  4. mysql 无法启动 unkown command

    1. https://serverfault.com/questions/490656/mysql-not-starting-error-usr-sbin-mysqld-unknown-option- ...

  5. Codeforces Round #375 (Div. 2) D. Lakes in Berland 并查集

    http://codeforces.com/contest/723/problem/D 这题是只能把小河填了,题目那里有写,其实如果读懂题这题是挺简单的,预处理出每一块的大小,排好序,从小到大填就行了 ...

  6. hadoop集群启动时DataNode节点启动失败

    错误日志如下: ************************************************************/ 2018-03-07 18:57:35,121 INFO o ...

  7. (转) cocos 里面scrollView一些方法

    void setBounceEnabled (bool enabled)设置当滚动到边界时,是否内部容器发生弹回(bounce)效果 bool isBounceEnabled () const获取边界 ...

  8. Android 自定义Adapter中实现startActivityForResult的分析

    最近几天在做文件上传的时候,想在自定义Adapter中启动activity时也返回Intent数据,于是想到了用startActivityForResult,可是用mContext怎么也调不出这个方法 ...

  9. Selenium3+webdriver学习笔记3(xpath方式元素定位)

    #!/usr/bin/env python# -*- coding:utf-8 -*- from selenium import webdriver import time,os # about:ad ...

  10. Python+selenium之下载文件

    一.Firefox文件下载 Web容许我们设置默认的文件下载路劲,文件会自动下载并且存放在指定的目录下. from selenium import webdriver import os fp = w ...