quartz 停止job如何停止一个job

Quartz的任务的暂时启动和暂停和恢复
Quartz的任务的暂时启动和暂停和恢复
发布时间: 8:57:32
编辑:www.fx114.net
本篇文章主要介绍了"Quartz的任务的暂时启动和暂停和恢复",主要涉及到Quartz的任务的暂时启动和暂停和恢复方面的内容,对于Quartz的任务的暂时启动和暂停和恢复感兴趣的同学可以参考一下。
Quartz的任务的暂时启动和暂停和恢复Quartz的任务的临时启动和暂停和恢复
在项目中需要手动启停某些服务,那么需要有一个控制这些任务的类。由于任务是有Quartz控制的,我们只需要通过Quartz的相关的API实现相关的功能即可。
package com.easyway.app.quartz.
import java.util.D
import java.util.L
import java.util.M
import org.quartz.JobDataM
import org.quartz.JobD
import org.quartz.JobK
import org.quartz.S
import org.quartz.SchedulerE
import org.quartz.SchedulerF
import org.quartz.T
import org.quartz.TriggerK
import org.quartz.impl.StdSchedulerF
import org.quartz.impl.matchers.GroupM
* 一个简单的quartz任务管理器
* @author longgangbai
public class QuartzScheduleMgr {
private static Scheduler scheduler=getScheduler();
* 创建一个调度对象
* @throws SchedulerException
private static Scheduler getScheduler() {
SchedulerFactory sf = new StdSchedulerFactory();
Scheduler scheduler=
scheduler = sf.getScheduler();
} catch (SchedulerException e) {
e.printStackTrace();
public static Scheduler getInstanceScheduler(){
* 启动一个调度对象
* @throws SchedulerException
public void start() throws SchedulerException
scheduler.start();
* 检查调度是否启动
* @throws SchedulerException
public boolean isStarted() throws SchedulerException
return scheduler.isStarted();
* 关闭调度信息
* @throws SchedulerException
public void shutdown() throws SchedulerException {
scheduler.shutdown();
* 添加调度的job信息
* @param jobdetail
* @param trigger
* @throws SchedulerException
public Date scheduleJob(JobDetail jobdetail, Trigger trigger)
throws SchedulerException{
return scheduler.scheduleJob(jobdetail, trigger);
* 添加相关的触发器
* @param trigger
* @throws SchedulerException
public Date scheduleJob(Trigger trigger) throws SchedulerException{
return scheduler.scheduleJob(trigger);
* 添加多个job任务
* @param triggersAndJobs
* @param replace
* @throws SchedulerException
public void scheduleJobs(Map&JobDetail, List&Trigger&& triggersAndJobs, boolean replace) throws SchedulerException
scheduler.scheduleJobs(triggersAndJobs, replace);
* 停止调度Job任务
* @param triggerkey
* @throws SchedulerException
public boolean unscheduleJob(TriggerKey triggerkey)
throws SchedulerException{
return scheduler.unscheduleJob(triggerkey);
* 停止调度多个触发器相关的job
* @param list
* @throws SchedulerException
public boolean unscheduleJobs(List&TriggerKey& triggerKeylist) throws SchedulerException{
return scheduler.unscheduleJobs(triggerKeylist);
* 重新恢复触发器相关的job任务
* @param triggerkey
* @param trigger
* @throws SchedulerException
public Date rescheduleJob(TriggerKey triggerkey, Trigger trigger)
throws SchedulerException{
return scheduler.rescheduleJob(triggerkey, trigger);
* 添加相关的job任务
* @param jobdetail
* @param flag
* @throws SchedulerException
public void addJob(JobDetail jobdetail, boolean flag)
throws SchedulerException {
scheduler.addJob(jobdetail, flag);
* 删除相关的job任务
* @param jobkey
* @throws SchedulerException
public boolean deleteJob(JobKey jobkey) throws SchedulerException{
return scheduler.deleteJob(jobkey);
* 删除相关的多个job任务
* @param jobKeys
* @throws SchedulerException
public boolean deleteJobs(List&JobKey& jobKeys)
throws SchedulerException{
return scheduler.deleteJobs(jobKeys);
* @param jobkey
* @throws SchedulerException
public void triggerJob(JobKey jobkey) throws SchedulerException {
scheduler.triggerJob(jobkey);
* @param jobkey
* @param jobdatamap
* @throws SchedulerException
public void triggerJob(JobKey jobkey, JobDataMap jobdatamap)
throws SchedulerException {
scheduler.triggerJob(jobkey, jobdatamap);
* 停止一个job任务
* @param jobkey
* @throws SchedulerException
public void pauseJob(JobKey jobkey) throws SchedulerException {
scheduler.pauseJob(jobkey);
* 停止多个job任务
* @param groupmatcher
* @throws SchedulerException
public void pauseJobs(GroupMatcher&JobKey& groupmatcher)
throws SchedulerException {
scheduler.pauseJobs(groupmatcher);
* 停止使用相关的触发器
* @param triggerkey
* @throws SchedulerException
public void pauseTrigger(TriggerKey triggerkey)
throws SchedulerException {
scheduler.pauseTrigger(triggerkey);
public void pauseTriggers(GroupMatcher&TriggerKey& groupmatcher)
throws SchedulerException {
scheduler.pauseTriggers(groupmatcher);
* 恢复相关的job任务
* @param jobkey
* @throws SchedulerException
public void resumeJob(JobKey jobkey) throws SchedulerException {
scheduler.pauseJob(jobkey);
public void resumeJobs(GroupMatcher&JobKey& matcher)
throws SchedulerException {
scheduler.resumeJobs(matcher);
public void resumeTrigger(TriggerKey triggerkey)
throws SchedulerException {
scheduler.resumeTrigger(triggerkey);
public void resumeTriggers(GroupMatcher&TriggerKey& groupmatcher)
throws SchedulerException
scheduler.resumeTriggers(groupmatcher);
* 暂停调度中所有的job任务
* @throws SchedulerException
public void pauseAll() throws SchedulerException
scheduler.pauseAll();
* 恢复调度中所有的job的任务
* @throws SchedulerException
public void resumeAll() throws SchedulerException
scheduler.resumeAll();
创建一个Job任务:
* Copyright 2005 - 2009 Terracotta, Inc.
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy
* of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
package com.easyway.app.quartz.
import java.util.D
import org.slf4j.L
import org.slf4j.LoggerF
import org.quartz.J
import org.quartz.JobExecutionC
import org.quartz.JobExecutionE
* 一个简单的quartz调用job
* @author longgangbai
public class HelloJob implements Job {
private static Logger _log = LoggerFactory.getLogger(HelloJob.class);
public HelloJob() {
public void execute(JobExecutionContext context)
throws JobExecutionException {
_("Hello World! - " + new Date());
创建触发器和调用相关的Job
* Copyright 2005 - 2009 Terracotta, Inc.
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy
* of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
package com.easyway.app.quartz.
import static org.quartz.DateBuilder.evenMinuteD
import static org.quartz.JobBuilder.newJ
import static org.quartz.TriggerBuilder.newT
import java.util.D
import org.quartz.JobD
import org.quartz.S
import org.quartz.T
import org.slf4j.L
import org.slf4j.LoggerF
* 一个简单的测试quartz任务管理器测试类
* @author longgangbai
public class QuartzScheduleMain {
* @throws Exception
public void run() throws Exception {
Logger log = LoggerFactory.getLogger(QuartzScheduleMain.class);
("------- Initializing ----------------------");
// First we must get a reference to a scheduler
//从调度管理器中获取调度对象
Scheduler sched = QuartzScheduleMgr.getInstanceScheduler();
("------- Initialization Complete -----------");
// computer a time that is on the next round minute
Date runTime = evenMinuteDate(new Date());
("------- Scheduling Job -------------------");
// define the job and tie it to our HelloJob class
//创建相关的job信息
JobDetail job = newJob(HelloJob.class)
.withIdentity("job1", "group1")
// Trigger the job to run on the next round minute
//创建一个触发器的名称
Trigger trigger = newTrigger()
.withIdentity("trigger1", "group1")
.startAt(runTime)
// Tell quartz to schedule the job using our trigger
//设置调度相关的Job
sched.scheduleJob(job, trigger);
(job.getKey() + " will run at: " + runTime);
// Start up the scheduler (nothing can actually run until the
// scheduler has been started)
//启动调度任务
sched.start();
("------- Started Scheduler -----------------");
Thread.sleep(25L * 1000L);
// executing...
} catch (Exception e) {
//暂时停止Job任务开始执行
("-------pauseJob.. -------------");
sched.pauseJob(job.getKey());
Thread.sleep(10L * 1000L);
} catch (Exception e) {
("------- resumeJob... -------------");
//恢复Job任务开始执行
sched.resumeJob(job.getKey());
Thread.sleep(10L * 1000L);
// executing...
} catch (Exception e) {
// wait long enough so that the scheduler as an opportunity to
// run the job!
("------- Waiting 65 seconds... -------------");
// wait 65 seconds to show job
Thread.sleep(65L * 1000L);
// executing...
} catch (Exception e) {
// shut down the ("------- Shutting Down ---------------------");
sched.shutdown(true);
("------- Shutdown Complete -----------------");
public static void main(String[] args) throws Exception {
QuartzScheduleMain example = new QuartzScheduleMain();
example.run();
本文标题:
本页链接:当前位置:&&
实现quartz定时器及quartz定时器原理介绍
&&&&来源:&互联网& 发布时间:
一、核心概念 Quartz的原理不是很复杂,只要搞明白几个概念,然后知道如何去启动和关闭一个调度程序即可。1、Job表示一个工作,要执行的具体内容。此接口中只有一个方法void execute(JobExecutionContext context)2、JobDetailJobDetail表示一个具体的可执行的调度程序,Job是这个可执行程调度程序所要执行的内容,另外JobDetail还包含了这个任务调度的方案和策略。
3、Trigger代表一个调度参数的配置,什么时候去调。4、Scheduler代表一个调度容器,一个调度容器中可以注册多个JobDetail和Trigger。当Trigger与JobDetail组合,就可以被Scheduler容器调度了。二、一个最简单入门实例
代码如下:import org.quartz.*; import org.quartz.impl.StdSchedulerF
import java.util.D
/** * quartz定时器测试 * * @author leizhimin
8:49:01 */ public class MyJob implements Job {
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
System.out.println(new Date() + ": doing something...");
class Test {
public static void main(String[] args) {
//1、创建JobDetial对象
JobDetail jobDetail = new JobDetail();
//设置工作项
jobDetail.setJobClass(MyJob.class);
jobDetail.setName("MyJob_1");
jobDetail.setGroup("JobGroup_1");
//2、创建Trigger对象
SimpleTrigger strigger = new SimpleTrigger();
strigger.setName("Trigger_1");
strigger.setGroup("Trigger_Group_1");
strigger.setStartTime(new Date());
//设置重复停止时间,并销毁该Trigger对象
java.util.Calendar c = java.util.Calendar.getInstance();
c.setTimeInMillis(System.currentTimeMillis() + 1000 * 1L);
strigger.setEndTime(c.getTime());
strigger.setFireInstanceId("Trigger_1_id_001");
//设置重复间隔时间
strigger.setRepeatInterval(1000 * 1L);
//设置重复执行次数
strigger.setRepeatCount(3);
//3、创建Scheduler对象,并配置JobDetail和Trigger对象
SchedulerFactory sf = new StdSchedulerFactory();
Scheduler scheduler =
scheduler = sf.getScheduler();
scheduler.scheduleJob(jobDetail, strigger);
//4、并执行启动、关闭等操作
scheduler.start();
} catch (SchedulerException e) {
e.printStackTrace();
//关闭调度器 //
scheduler.shutdown(true); //
} catch (SchedulerException e) { //
e.printStackTrace(); //
执行结果:
当把结束时间改为: 代码如下://设置重复停止时间,并销毁该Trigger对象 java.util.Calendar c = java.util.Calendar.getInstance(); c.setTimeInMillis(System.currentTimeMillis() + 1000 * 1L); strigger.setEndTime(c.getTime());
执行结果:当添加一条关闭调度器的语句://4、并执行启动、关闭等操作 scheduler.start(); scheduler.shutdown(true);
程序执行结果:Thu Jul 23 10:11:50 CST 2009: doing something...
Process finished with exit code 0仅仅执行了一次,这一次能执行完,原因是设定了scheduler.shutdown(true);true表示等待本次任务执行完成后停止。从这里也可以看出,scheduler是个容器,scheduler控制jobDetail的执行,控制的策略是通过trigger。当scheduler容器启动后,jobDetail才能根据关联的trigger策略去执行。当scheduler容器关闭后,所有的jobDetail都停止执行。三、透过实例看原理
通过研读Quartz的源代码,和本实例,终于悟出了Quartz的工作原理。1、scheduler是一个计划调度器容器(总部),容器里面可以盛放众多的JobDetail和trigger,当容器启动后,里面的每个JobDetail都会根据trigger按部就班自动去执行。2、JobDetail是一个可执行的工作,它本身可能是有状态的。3、Trigger代表一个调度参数的配置,什么时候去调。4、当JobDetail和Trigger在scheduler容器上注册后,形成了装配好的作业(JobDetail和Trigger所组成的一对儿),就可以伴随容器启动而调度执行了。5、scheduler是个容器,容器中有一个线程池,用来并行调度执行每个作业,这样可以提高容器效率。6、将上述的结构用一个图来表示,如下:
四、总结1、搞清楚了上Quartz容器执行作业的的原理和过程,以及作业形成的方式,作业注册到容器的方法。就认识明白了Quartz的核心原理。2、Quartz虽然很庞大,但是一切都围绕这个核心转,为了配置强大时间调度策略,可以研究专门的CronTrigger。要想灵活配置作业和容器属性,可以通过Quartz的properties文件或者XML来实现。3、要想调度更多的持久化、结构化作业,可以通过数据库读取作业,然后放到容器中执行。4、所有的一切都围绕这个核心原理转,搞明白这个了,再去研究更高级用法就容易多了。5、Quartz与Spring的整合也非常简单,Spring提供一组Bean来支持:MethodInvokingJobDetailFactoryBean、SimpleTriggerBean、SchedulerFactoryBean,看看里面需要注入什么属性即可明白了。Spring会在Spring容器启动时候,启动Quartz容器。6、Quartz容器的关闭方式也很简单,如果是Spring整合,则有两种方法,一种是关闭Spring容器,一种是获取到SchedulerFactoryBean实例,然后调用一个shutdown就搞定了。如果是Quartz独立使用,则直接调用scheduler.shutdown(true);7、Quartz的JobDetail、Trigger都可以在运行时重新设置,并且在下次调用时候起作用。这就为动态作业的实现提供了依据。你可以将调度时间策略存放到数据库,然后通过数据库数据来设定Trigger,这样就能产生动态的调度。
相关技术文章: &&&&
代码如下:import java.io.*;
public class FileOperate {
public FileOperate() {
* 新建目录
* @param folderPath String 如 c:/fqf
* @return boolean
public void newFolder(String folderPath) {
String filePath = folderP
filePath = filePath.toString();
java.io.File myFilePath = new java.io.File(filePath);
if (!myFilePath.exists()) {
myFilePath.mkdir();
catch (Exception e) {
System.out.println("新建目录操作出错...... &&&&
Quartz是一个完全由java编写的开源作业调度框架,具体的介绍可到/quartz/官方网站查看。Quartz的几个核心的接口和类为:Job接口:自己写的“定时程序”实现此接口的void execute(JobExecutionContext arg0)方法,Job还有一类为有状态的StatefulJob接口,如果我们需要在上一个作业执行完后,根据其执行结果再进行下次作业的执行,则需要实现此接口。Trigger抽象类:调度类(Scheduler)在时间到时调用此类,再由trigger类调用指定的定时程序。Quertz中提供了两类触发器为:SimpleTrigger,CronTrigger。前者用于实现比较简单的定时功能,例如几点开始,...... &&&&
如果搞明白了Java中全角字符和半角字符之间的关系
那他们之间的转换根本就不是个事.
全角字符与半角字符的关系
可以通过下面的程序看看Java中所有字符以及对应编码的值 代码如下:
public static void main(String[] args) {
for (int i = Character.MIN_VALUE; i &= Character.MAX_VALUE; ++i) {
System.out.println(i + "
" + (char)i);
从输出可以看到
1.半角字符是从33开始到126结束2.与半角字符对应的全角字符是从65281开...... 最新技术文章: &&&&
HTML是WEB的核心,互联网中你看到的所有页面都是HTML,不管它们是由JavaScript,JSP,PHP,ASP或者是别的什么WEB技术动态生成的。你的浏览器会去解析HTML并替你去渲染它们。不过如果你需要自己在Java程序中解析HTML文档并查找某些元素,标签,属性或者检查某个特定的元素是否存在的话,那又该如何呢?如果你已经使用Java编程多年了,我相信你肯定试过去解析XML,也使用过类似DOM或者SAX这样的解析器,不过很有可能你从未进行过任何的HTML解析的工作。更讽刺的是,在Java应用中,很少会有需要你去解析HTML文档的时候,这里并不包括Servlet或者其它的Java WEB技术。更糟糕...... &&&&
第一章 你好,lambda表达式!
Java的编码风格正面临着翻天覆地的变化。
我们每天的工作将会变成更简单方便,更富表现力。Java这种新的编程方式早在数十年前就已经出现在别的编程语言里面了。这些新特性引入Java后,我们可以写出更简洁,优雅,表达性更强,错误更少的代码。我们可以用更少的代码来实现各种策略和设计模式。
在本书中我们将通过日常编程中的一些例子来探索函数式风格的编程。在使用这种全新的优雅的方式进行设计编码之前,我们先来看下它到底好在哪里。
改变了你的思...... &&&&
第二章:集合的使用
我们经常会用到各种集合,数字的,字符串的还有对象的。它们无处不在,哪怕操作集合的代码要能稍微优化一点,都能让代码清晰很多。在这章中,我们探索下如何使用lambda表达式来操作集合。我们用它来遍历集合,把集合转化成新的集合,从集合中删除元素,把集合进行合并。
遍历列表是最基本的一个集合操作,这么多年来,它的操作也发生了一些变化。我们使用一个遍历名字的小例子,从最古老的版本介绍到现在最优雅的版本。
用下面的代码我们很容易创建一个不可变的名字的...... 
特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!
(C)2012-,站长邮箱:www_169it_(请将#改为@) 您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&本帖子已过去太久远了,不再提供回复功能。

参考资料

 

随机推荐