文档章节

Quartz——SimpleTrigger触发器

闪电
 闪电
发布于 2015/05/09 23:22
字数 901
阅读 49
收藏 1

转载请出自出处:http://eksliang.iteye.com/blog/2208166

一.概述

SimpleTrigger触发器,当且仅需触发一次或者以固定时间间隔周期触发执行;

 

二.SimpleTrigger的构造函数

  1. SimpleTrigger(String name, String group):通过该构造函数指定Trigger所属组和名称;
  2. SimpleTrigger(String name, String group, Date startTime):除指定Trigger所属组和名称外,还可以指定触发的开发时间;
  3. SimpleTrigger(String name, String group, Date startTime, Date endTime, int repeatCount, long repeatInterval):除指定以上信息外,还可以指定结束时间、重复执行次数、时间间隔等参数;
  4. SimpleTrigger(String name, String group, String jobName, String jobGroup, Date startTime, Date endTime, int repeatCount, long repeatInterval):这是最复杂的一个构造函数,在指定触发参数的同时,还通过jobGroup和jobName,让该Trigger和Scheduler中的某个任务关联起来。

三.参考实例

    简单的Job实现类:打印任务详情

 

package com.ickes.job;

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
/**
 * 实现Job接口,定义运行的任务
 * @author Ickes
 */
public class SimpleJob implements Job {

	public void execute(JobExecutionContext context)
			throws JobExecutionException {
		//打印任务详情
		System.out.println(
				context.getJobDetail().getGroup() 
				+"——"+context.getJobDetail().getName()
				+"——"+context.getTrigger().getName()
				+"——"+context.getTrigger().getGroup());
	}

}

 

 

   使用SimpleTrigger进行调度(实例一)

 

package com.ickes.job;

import java.util.Date;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleTrigger;
import org.quartz.impl.StdSchedulerFactory;

/**
 * @author Ickes
 */
public class SimpleTriggerDemo {
	public static void main(String[] args) throws Exception {
		//第一步:创建一个JobDetail实例
		JobDetail jobDetail = new JobDetail("j_job1","j_group1", SimpleJob.class);
		//第二步:通过SimpleTrigger触发器定义调度规则:马上启动,每2秒运行一次,共运行100次
		SimpleTrigger simpleTrigger = new SimpleTrigger("t_job1","t_group_1");
		simpleTrigger.setStartTime(new Date());//开始运行时间
		simpleTrigger.setRepeatInterval(2000); //运行间隔单位为毫秒
		simpleTrigger.setRepeatCount(100);     //运行次数
		//第三步:通过SchedulerFactory获取一个调度器实例
		SchedulerFactory schedulerFactory = new StdSchedulerFactory();
		Scheduler scheduler = schedulerFactory.getScheduler();
		//第四步:将job跟trigger注册到scheduler中进行调度
		scheduler.scheduleJob(jobDetail, simpleTrigger);
		//第五步:调度启动
		scheduler.start();
	}
}

    上面代码也可以通过SimpleTrigger的setStartTime(java.util.Date startTime)和setEndTime(java.util.Date endTime)指定运行的时间范围,当运行次数和时间范围冲突时,超过时间范围的任务运行不被执行。如可以通过simpleTrigger.setStartTime(new Date(System.currentTimeMillis() + 60000L))指定60秒钟以后开始。

 

    使用SimpleTrigger进行调度(实例二)

 

package com.ickes.job;

import java.util.Date;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleTrigger;
import org.quartz.impl.StdSchedulerFactory;

/**
 * @author Ickes
 */
public class SimpleTriggerDemo1 {
	public static void main(String[] args) throws Exception {
		//第一步:创建一个JobDetail实例
		JobDetail jobDetail = new JobDetail("j_job1","j_group1", SimpleJob.class);
		SimpleTrigger simpleTrigger = new SimpleTrigger("trigger1_1","tgroup1");
		simpleTrigger.setStartTime(new Date());//开始运行时间
		simpleTrigger.setRepeatInterval(2000); //运行间隔单位为毫秒
		simpleTrigger.setRepeatCount(100);     //运行次数
		simpleTrigger.setJobGroup("j_group1");
		simpleTrigger.setJobName("j_job1");
		//第三步:通过SchedulerFactory获取一个调度器实例
		SchedulerFactory schedulerFactory = new StdSchedulerFactory();
		Scheduler scheduler = schedulerFactory.getScheduler();
		//第四步:将job跟trigger注册到scheduler中进行调度
		scheduler.addJob(jobDetail, true);
		scheduler.scheduleJob(simpleTrigger);
		//第五步:调度启动
		scheduler.start();
	}
}

 

   实例一与实例二的区别很明显:注册job跟trigger到scheduler中的方式不同

 

 四.TriggerUtils工具类

在构造Trigger实例时, 可以考虑使用org.quartz.TriggerUtils工具类,该工具类不但提供了众多获取特定时间的方法,还拥有众多获取常见Trigger的方法。

参考实例如下

package com.ickes.job;

import java.text.SimpleDateFormat;
import java.util.Date;
import org.quartz.TriggerUtils;
/**
 * 
 * @author Ickes
 *
 */
public class TriggerUtilsDemo {
	public static SimpleDateFormat fomat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
	
	/**
	 * 方法太多,但是他的注释非常详细
	 * @param args
	 */
	public static void main(String[] args) {
		//创建一个每秒执行一次的Trigger
		TriggerUtils.makeSecondlyTrigger("t_name");
		//创建一个每星期某一特定时间点执行一次的Trigger
		TriggerUtils.makeWeeklyTrigger("t_name", 1, 1, 1);
		//创建一个每5秒执行一次,总共执行10次的Trigger
		TriggerUtils.makeSecondlyTrigger("t_name",5,10);
		//获得时间的方法
		println(TriggerUtils.getDateOf(0, 0, 0));
		//返回下一个小时的时间,例如2015-05-04 11:20:00 返回2015-05-04 12:00:00
		println(TriggerUtils.getEvenHourDate(new Date()));	
	}
	
	public static void println(Date date){
		System.out.println(fomat.format(date));
	}
}

 

 

本文转载自:http://eksliang.iteye.com/blog/2208166

闪电
粉丝 74
博文 392
码字总数 6789
作品 0
海淀
技术主管
私信 提问
Quartz与Spring的整合使用——创建JobDetail的方式及Trigger

之前说到过Quartz的基本使用(猛戳这里看文章),在实际使用中,我们通常会将定时任务交由spring容器来管理,所以今天我们来说说Quartz与spring的整合。 咱们还是按照Quartz的三大元素的顺序...

哲别0
2017/10/25
0
0
使用cronTriggerBean子类,动态设置cronExpression(quartz +...

Quartz的使用前准备: 1.引入必要的jar包: quartzallxxx.jar 或者quartz_xxx.jar slf4japixx.jar quartz所需要的日志工具 quartz知识简单了解:2.quartz的两种作业存储方式: RAMJobStore,...

gerry_pang
2013/08/11
0
0
用 Quartz 进行作业调度

Quartz API 采用多面方式在 Java 应用程序中进行任务调度 简介: Quartz 是个开放源码项目,提供了丰富的作业调度集。在这篇文章中,软件工程师 Michael Lipton 和 IT 架构师 Soobaek Jang 对...

石头哥哥
2013/02/21
0
0
springboot 整合quartz (二):jobDataMap和trigger

---layout: blogistop: truetitle: "springboot 整合quartz (二):jobDataMap和trigger"date: 2018-10-09category: springboottags: springboot quartz --- jobDataMap jobDataMap可以用来装载......

开心的哈士奇
2018/10/11
0
0
了解Quartz体系结构

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

李永china
2016/11/04
15
0

没有更多内容

加载失败,请刷新页面

加载更多

0.01-Win10安装linux子系统

一、安装Debian子系统 -1、控制面板设置: -1.1、打开“控制面板” —— “程序” —— “启用或关闭Windows功能” —— 勾选 “适用于Linux的Windows子系统” -2、设置: -2.1、打开“设置”...

静以修身2025
昨天
1
0
init 0-6 (启动级别:init 0,1,2,3,4,5,6)

启动级别: init 0,1,2,3,4,5,6 这是个很久的知识点了,只是自己一直都迷迷糊糊的,今天在翻出来好好理解下。。 0: 停机 1:单用户形式,只root进行维护 2:多用户,不能使用net file system...

圣洁之子
昨天
2
0
Android Camera HAL浅析

1、Camera成像原理介绍 Camera工作流程图 Camera的成像原理可以简单概括如下: 景物(SCENE)通过镜头(LENS)生成的光学图像投射到图像传感器(Sensor)表面上,然后转为电信号,经过A/D(模数转...

天王盖地虎626
昨天
2
0
聊聊Elasticsearch的ProcessProbe

序 本文主要研究一下Elasticsearch的ProcessProbe ProcessProbe elasticsearch-7.0.1/server/src/main/java/org/elasticsearch/monitor/process/ProcessProbe.java public class ProcessProb......

go4it
昨天
2
0
mysql PL(procedure language)流程控制语句

在MySQL中,常见的过程式SQL语句可以用在存储体中。其中包括IF语句、CASE语句、LOOP语句、WHILE语句、ITERATE语句和LEAVE语句,它们可以进行流程控制。 IF语句相当于Java中的if()...else if(...

edison_kwok
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部