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是为大家熟知的任务调度框架,先看看官网的介绍: ---------------------------------------------------------------------- ...
随机推荐
- JavaScript进阶 - 第9章 DOM对象,控制HTML元素
第9章 DOM对象,控制HTML元素 9-1 认识DOM 文档对象模型DOM(Document Object Model)定义访问和处理HTML文档的标准方法.DOM 将HTML文档呈现为带有元素.属 ...
- vue教程3-webpack搭建项目
vue-cli https://cli.vuejs.org/zh/ vue-cli是vue的命令行工具,对于创建项目,安装各种组件,运行项目都极为方便,是在开发vue中的必备工具 vue-cli基于n ...
- list remove元素
public class TestList { public static void main(String[] args) { List<Integer> list = new Link ...
- net core (下)
net core (下) 第一部分: https://www.cnblogs.com/cgzl/p/8450179.html 本文是基于Windows10的. Debugging javascript ...
- NET Core Hosting
ASP.NET Core 运行原理解剖[1]:Hosting ASP.NET Core 是新一代的 ASP.NET,第一次出现时代号为 ASP.NET vNext,后来命名为ASP.NET 5,随 ...
- 【OGG】OGG的单向DML复制配置(一)
[OGG]OGG的单向DML复制配置(一) 一.1 BLOG文档结构图 一.2 前言部分 一.2.1 导读 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识, ...
- Storm概念学习系列之并行度与如何提高storm的并行度
不多说,直接上干货! 对于storm来说,并行度的概念非常重要!大家一定要好好理解和消化. storm的并行度,可以简单的理解为多线程. 如何提高storm的并行度? storm程序主要由spout和 ...
- 使用OAuth保护REST API并使用简单的Angular客户端
1.概述 在本教程中,我们将使用OAuth保护REST API并从简单的Angular客户端使用它. 我们要构建的应用程序将包含四个独立的模块: 授权服务器 资源服务器 UI implicit - 使 ...
- C#高级语法
委托 委托就是指针函数,委托的定义与类的属性定义类似都必须在类的方法体进行. 委托的定义: class Program { //定义委托:委托不能在方法体内定义. public delegate st ...
- go 从表结构生成结构体
package main import ( "fmt" "github.com/gohouse/converter" ) func main() { // 初始 ...