quartz 任务调度
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 任务调度的更多相关文章
- 从零开始学 Java - Spring 使用 Quartz 任务调度定时器
生活的味道 睁开眼看一看窗外的阳光,伸一个懒腰,拿起放在床一旁的水白开水,甜甜的味道,晃着尾巴东张西望的猫猫,在窗台上舞蹈.你向生活微笑,生活也向你微笑. 请你不要询问我的未来,这有些可笑.你问我你是 ...
- Quartz任务调度快速入门
Quartz任务调度快速入门 概述 了解Quartz体系结构 Quartz对任务调度的领域问题进行了高度的抽象,提出了调度器.任务和触发器这3个核心的概念,并在org.quartz通过接口和类对重要的 ...
- Quartz任务调度
狂神声明 : 文章均为自己的学习笔记 , 转载一定注明出处 ; 编辑不易 , 防君子不防小人~共勉 ! Quartz任务调度 课程目标 : 了解Quartz框架 : 任务(Job) 触发器(Trig ...
- Quartz任务调度实践
最近在写一个任务调度程序,需要每隔几秒查询数据库,并取出数据做一些处理操作.使用到了Quartz任务调度框架. 基本概念 Quartz包含几个重要的对象,分别为任务(Job),触发器(Trigger) ...
- Quartz任务调度入门
Quartz任务调度入门 了解Quartz体系结构Quartz对任务调度的领域问题进行了高度的抽象,提出了调度器.任务和触发器这3个核心的概念,并在org.quartz通过接口和类对重要的这些核心概念 ...
- Spring研磨分析、Quartz任务调度、Hibernate深入浅出系列文章笔记汇总
Spring研磨分析.Quartz任务调度.Hibernate深入浅出系列文章笔记汇总 置顶2017年04月27日 10:46:45 阅读数:1213 这系列文章主要是对Spring.Quartz.H ...
- quartz任务调度初次使用记录
近期公司开发的数据交换系统嵌入了quartz任务调度功能,大概了解了任务调度的整个流程,项目中需要用到它来进行定时任务操作,对数据定时检查以及及时交换. Quartz是OpenSymphony开源组织 ...
- (转)Quartz任务调度(1)概念例析快速入门
http://blog.csdn.net/qwe6112071/article/details/50991563 Quartz框架需求引入 在现实开发中,我们常常会遇到需要系统在特定时刻完成特定任务的 ...
- Quartz任务调度 服务日志+log4net打印日志+制作windows服务
引言 现在许多的项目都需要定时的服务进行支撑,而我们经常用到的定时服务就是Quartz任务调度了.不过我们在使用定时Job进行获取的时候,有时候我们就需要记录一下自定义的日志,甚至我们还会对执行定时J ...
- Quartz任务调度:MisFire策略和源码分析
Quartz是为大家熟知的任务调度框架,先看看官网的介绍: ---------------------------------------------------------------------- ...
随机推荐
- Maven - StackOverflowError
问题与分析 今天发现服务器上的Jenkins在集成项目时报错,报错原因如下: error compiling: java.lang.StackOverflowError -> [Help 1] ...
- 利用Hough变换识别图像中的直线
引入 近期看到2015年数学建模A题太阳影子定位中的第四问,需要根据附件中视频里的直杆的太阳影子的变化确定拍摄地点.其实确定拍摄地点这个问题并不是十分困难,因为有前三问的铺垫,我们已经得出了太阳影子长 ...
- Swing 100行画图示例
关键内容,可以自行扩展 package main; import java.awt.BasicStroke; import java.awt.BorderLayout; import java.awt ...
- 基于vuecli3构建一个快速开发h5 APP的模板
基于vuecli3构建的一个快速开发h5 APP的模板,集成了高德地图.mint-ui,以及antv-f2可视化框架 vue-cli3安装 查看vue cli版本 vue --version 要求no ...
- 日志AOP的实现
/// <summary> /// 日志AOP拦截 /// </summary> [AttributeUsage(AttributeTargets.Method, AllowM ...
- C#/.net基础知识
1 .NET 中类和结构的区别? 答:结构和类具有大体的语法,但是结构受到的限制比类要多.结构不能申明有默认的构造函数,为结构的副本是又编译器创建 和销毁的,所以不需要默认的构造函数和析构函数.结构 ...
- 表单和HTML5
1.form表单 <form action="" method=""> </form> action: 规定当提交表单时,向何处发送表单 ...
- js屏蔽鼠标右键事件
<script type="text/javascript">function stops(){ return false;}document.oncontextmen ...
- Ubuntu 自动获取ip地址
$ sudo dhclient -r //release ip 释放IP$ sudo dhclient //获取IP手動使用 DHCP 自 ...
- 小白学phoneGap《构建跨平台APP:phoneGap移动应用实战》连载三(通过实例来体验生命周期)
4.1.2 通过实例来亲身体验Activity的生命周期 上一小节介绍了Activity生命周期中的各个过程,本小节将以一个简单的实例来使读者亲身体验到Activity生命周期中的各个事件. 在Ec ...