scheduler.shutDown(true)不执行job即停止

package schedule;

import java.text.ParseException;
import java.util.Calendar;
import java.util.Date;

import org.quartz.CronExpression;
import org.quartz.CronTrigger;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.impl.JobDetailImpl;
import org.quartz.impl.StdSchedulerFactory;
import org.quartz.impl.triggers.CronTriggerImpl;
import org.quartz.impl.triggers.SimpleTriggerImpl;

public class TriggerTest {
	public static void main(String[] args) throws SchedulerException, ParseException, InterruptedException {
		testSimpleTrigger();

		//testCronTrigger();
	}

	private static void testSimpleTrigger() throws SchedulerException, InterruptedException{
		JobDetailImpl jobDetail = new JobDetailImpl();
		jobDetail.setGroup("myGroup");
		jobDetail.setJobClass(MyJob.class);
		jobDetail.setName("jobDetail");

		SimpleTriggerImpl trigger = new SimpleTriggerImpl();
		trigger.setStartTime(new Date());
		trigger.setName("myTrigger");
		trigger.setRepeatInterval(1000);
		trigger.setRepeatCount(1);

		/*job在endTime时不再执行,但scheduler并未shutdown
		 * Date c = new Date();
		c.setTime(System.currentTimeMillis()+2000L);
		trigger.setEndTime(c);*/

		Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
		scheduler.scheduleJob(jobDetail, trigger);
		scheduler.start();
		scheduler.shutdown(true);

	}

}

执行时发现MyJob一次也没执行,scheduler就shutDown了。后来在网上看到一篇回答

http://stackoverflow.com/questions/15928980/quartz-scheduler-shuts-down-before-job-execution

答主提到了这些:I think you‘re misunderstanding the purpose of scheduler.shutdown(true); It will wait for executing jobs to finish, but it will NOT wait for scheduled jobs to start and finish. Your job is not starting before you shutdown the scheduler.You could put a Thread.sleep(wait); before you shut it down.

原来是shutDown(true)只是等待scheduler执行完,而不是等等job完成。试着按答主的方法加了,即

package schedule;

import java.text.ParseException;
import java.util.Calendar;
import java.util.Date;

import org.quartz.CronExpression;
import org.quartz.CronTrigger;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.impl.JobDetailImpl;
import org.quartz.impl.StdSchedulerFactory;
import org.quartz.impl.triggers.CronTriggerImpl;
import org.quartz.impl.triggers.SimpleTriggerImpl;

public class TriggerTest {
	public static void main(String[] args) throws SchedulerException, ParseException, InterruptedException {
		testSimpleTrigger();

		//testCronTrigger();
	}

	private static void testSimpleTrigger() throws SchedulerException, InterruptedException{
		JobDetailImpl jobDetail = new JobDetailImpl();
		jobDetail.setGroup("myGroup");
		jobDetail.setJobClass(MyJob.class);
		jobDetail.setName("jobDetail");

		SimpleTriggerImpl trigger = new SimpleTriggerImpl();
		trigger.setStartTime(new Date());
		trigger.setName("myTrigger");
		trigger.setRepeatInterval(1000);
		trigger.setRepeatCount(1);

		/*job在endTime时不再执行,但scheduler并未shutdown
		 * Date c = new Date();
		c.setTime(System.currentTimeMillis()+2000L);
		trigger.setEndTime(c);*/

		Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
		scheduler.scheduleJob(jobDetail, trigger);
		scheduler.start();
		Thread.sleep(2000);//不加这一句,会在schedule触发时即shutdown,而不是job执行完shutdown
		scheduler.shutdown(true);

	}
}

给job留够执行完成的时间,则在job重复执行一次后,scheduler关闭。

时间: 2024-11-05 14:46:27

scheduler.shutDown(true)不执行job即停止的相关文章

pybot执行多条用例时,某一个用例执行失败,停止所有用例的执行

问题: 解决办法: pybot -exitonfailure E:\robot\呼送项目\测试用例\基本流程\主流程.txt 参考文章:http://blog.csdn.net/huashao0602/article/details/72846217(pybot参数介绍)

实现quartz定时器及quartz定时器原理介绍

一.核心概念 Quartz的原理不是很复杂,只要搞明白几个概念,然后知道如何去启动和关闭一个调度程序即可. 1.Job表示一个工作,要执行的具体内容.此接口中只有一个方法void execute(JobExecutionContext context) 2.JobDetailJobDetail表示一个具体的可执行的调度程序,Job是这个可执行程调度程序所要执行的内容,另外JobDetail还包含了这个任务调度的方案和策略. 3.Trigger代表一个调度参数的配置,什么时候去调. 4.Sched

【转】Spring Quartz的原理

Quartz是一个大名鼎鼎的Java版开源定时调度器,功能强悍,使用方便. 一.核心概念 Quartz的原理不是很复杂,只要搞明白几个概念,然后知道如何去启动和关闭一个调度程序即可. 1.Job 表示一个工作,要执行的具体内容.此接口中只有一个方法 void execute(JobExecutionContext context) 2.JobDetail JobDetail表示一个具体的可执行的调度程序,Job是这个可执行程调度程序所要执行的内容,另外JobDetail还包含了这个任务调度的方案

Quartz Scheduler(2.2.1) - hello world

简单示例 1. maven 依赖 <dependencies> <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.2.1</version> </dependency> <dependency> <groupId>org.quartz-

定时执行任务

首先  Install-Package Quartz; using System; using Quartz; using System.Collections.Specialized; using Quartz.Impl; using Common.Logging; namespace LisWms.Sch { public class Scheduler { private static Scheduler instance; private static Object locker = n

通过Job,Trigger,Scheduler看Quartz2.x作业调度框架

最近使用到Quartz框架来做定时推送数据的功能的调度(注:在Java可以使用java.util.Timer和实现java.util.TimerTask接口的类做定时任务功能). 本文主要从大的框架方面介绍Quartz的基本使用和Quartz对用户提供的扩展点JobListener等监听接口. 通常对于作业调度我们关注这三个方面的内容:作业,调度时间,由谁调度.比如:我明天去北京.这就好中,将"去北京"看做一个作业,"我"就是这个作业的调度者,而"明天&q

浅谈Scheduler

1.Scheduler工厂模式 所有的Scheduler实例应该由SchedulerFactory来创建 2.SchedulerFactory类图   最常用的是StdSchedulerFactory工程类,其出那个键Scheduler的两种方式: //3. 创建scheduler Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler(); // 3. 创建scheduler SchedulerFactory sfact =

quartz 浅谈 Scheduler

1.Scheduler工厂模式 所有的Scheduler实例应该由SchedulerFactory来创建 2.SchedulerFactory类图   最常用的是StdSchedulerFactory工程类,其出那个键Scheduler的两种方式: //3. 创建scheduler Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler(); // 3. 创建scheduler SchedulerFactory sfact =

学习了quartz.net2.0的心得

由于项目中要运用到此调度方法,所以抽空学习了下,简单的用法可以掌握了 首先作为没有用过的人来说,怎么用呢? 于是百度了下原来先要下载 quartz.net2.0, 然后我就去下了个quartz.net2.0 ,接着便是要把Quartz.dll还有Common.Logging.dll引用了 ,最后就是把config配置了,这个简单: 直接贴代码 <configSections> <section name="quartz" type="System.Confi