quartz 2.2.1

public class QuartzManager {

	public static StdSchedulerFactory factory = new StdSchedulerFactory();

	public static String MODELNAME = "analyzerModel";

	public static Scheduler scheduler = null;

	public static Scheduler getScheduler(){
		try {
			scheduler = factory.getScheduler();
		} catch (SchedulerException e) {
			e.printStackTrace();
		}
		return scheduler;
	}

	public static String getJobName(String id) {

		return "job" + id;
	}

	public static String getTriggerName(String id) {

		return "trigger" + id;
	}

	/**
	 * 启动所有定时任务
	 */
	public static void startJobs() {
		try {
			Scheduler sched = factory.getScheduler();
			sched.start();
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}

	/**
	 * 停用所有定时任务
	 */
	public static void shutdownJobs() {
		try {
			Scheduler sched = factory.getScheduler();
			if (!sched.isShutdown()) {
				sched.shutdown();
			}
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}

	public static void addJob(TaskModel model) throws SchedulerException{
		String exp = model.getExpress();
		for (AnalyzerRelation analyzerModel : model.getaLists()) {
			addJob(analyzerModel,exp,model.getName());
		}
	}

	public static void addJob(AnalyzerRelation analyzerModel,String exp,String name) throws SchedulerException{
		System.out.println("【"+name+"】执行计划开始启动("+exp+").................");
		String jobName = getJobName(analyzerModel.getId());
		String triggerName = getTriggerName(analyzerModel.getId());
		System.out.println("【"+jobName+"】job名称..............................");
		System.out.println("【"+triggerName+"】trigger名称......................");
		JobDetail job = (JobDetail) JobBuilder.newJob(CustomJob.class)
				.withIdentity(jobName, Scheduler.DEFAULT_GROUP).build();
		job.getJobDataMap().put(QuartzManager.MODELNAME, analyzerModel);
		Trigger trigger = TriggerBuilder.newTrigger().withIdentity(triggerName, Scheduler.DEFAULT_GROUP)
				.withSchedule(CronScheduleBuilder.cronSchedule(exp)).build();
		scheduler.scheduleJob(job, trigger);
	}

	public static void removeJob(String id,String name) throws Exception{
		System.out.println("【"+name+"】移除定时开始................................");
		String jobName = getJobName(id);
		JobKey jobKey = JobKey.jobKey(jobName);
		String triggerName = QuartzManager.getTriggerName(id);
		TriggerKey triggerKey = TriggerKey.triggerKey(triggerName);
		scheduler.unscheduleJob(triggerKey);
		scheduler.pauseTrigger(triggerKey);
		scheduler.deleteJob(jobKey);
		System.out.println("【"+name+"】移除定时成功.................................");
	}

}
package com.diqm.quality.plugin.job;

import java.util.List;

import org.quartz.CronTrigger;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.TriggerKey;

import com.diqm.quality.service.model.AnalyzerRelation;

/**
 * 启动定时任务
 *
 * @author THINK
 *
 */
public class JobExecute {

	/**
	 * 启动多个定时任务
	 * @param lists
	 */
	public void start(List<TaskModel> lists) {
		Scheduler scheduler = null;
		try {
			scheduler = QuartzManager.getScheduler();
			for (TaskModel model : lists) {
				QuartzManager.addJob(model);
			}
			scheduler.start();
		} catch (SchedulerException e) {
			e.printStackTrace();
		}
	}

	/**
	 * 启动定时任务
	 * @param lists
	 */
	public void start(TaskModel model) {
		Scheduler scheduler = null;
		try {
			scheduler = QuartzManager.getScheduler();
			QuartzManager.addJob(model);
			scheduler.start();
		} catch (SchedulerException e) {
			e.printStackTrace();
		}
	}

	/**
	 * 停止定时任务
	 * @param lists
	 */
	public void stop(List<AnalyzerRelation> lists) {
		Scheduler scheduler = null;
		try {
			scheduler = QuartzManager.getScheduler();
			for (AnalyzerRelation analyzerModel : lists) {
				String triggerName = QuartzManager.getTriggerName(analyzerModel.getId());
				TriggerKey triggerKey = TriggerKey.triggerKey(triggerName);
				CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey);
				 if (trigger == null) {
					 continue;
				 }else{
					 QuartzManager.removeJob(analyzerModel.getId(),analyzerModel.getName());
				 }
			}
			scheduler.start();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public void modifyStart(TaskModel model){
		Scheduler scheduler = null;
		try {
			scheduler = QuartzManager.getScheduler();
			String exp = model.getExpress();
			for (AnalyzerRelation analyzerModel : model.getaLists()) {
				String triggerName = QuartzManager.getTriggerName(analyzerModel.getId());
				TriggerKey triggerKey = TriggerKey.triggerKey(triggerName);
				CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey);
				 if (trigger == null) {
					 QuartzManager.addJob(analyzerModel, exp,model.getName());
				 }else{
					 String oldTime = trigger.getCronExpression();
					 if (!oldTime.equalsIgnoreCase(exp)) {
						System.out.println("【修改时间】开始("+exp+")...");
						QuartzManager.removeJob(analyzerModel.getId(),analyzerModel.getName());
						QuartzManager.addJob(analyzerModel,exp,model.getName());
					 }  

				 }

			}
			scheduler.start();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 停用所有定时任务
	 */
	public static void shutdownJobs() {
		QuartzManager.shutdownJobs();
	}

}
时间: 2024-07-31 01:43:50

quartz 2.2.1的相关文章

quartz入门

quartz有两个重要对象,作业JobDetail和触发器Trigger,它们是多对多的关系 作业 JobDetail JobDetail jobDetail = JobBuilder.newJob(HelloQuartzJob.class) .withIdentity("testJob_1", "group_1") .build(); 触发器 Trigger,Quartz有两大触发器,SimpleTrigger和CronTrigger Trigger trigge

Spring quartz定时任务service注入问题

今天想单元测试一下spring中的quartz定时任务,一顿折腾,到最后总是发现job类里注入的service为null.一开始还以为spring的配置问题,各种找原因,最后还是确定是没有注入. 就去网上搜搜吧.也找出来一些眉目.简单的理解这个原因是job是在quartz中实例化出来的,不受spring的管理.所以就导致注入不进去了.参考这个文章 http://www.tuicool.com/articles/Qjyamu 找着试试的态度,就按照文章里说的.new一个类 public class

Spring中使用Quartz

package com.ncs.hj; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.springframework.scheduling.quartz.QuartzJobBean; import java.util.Date; public class SpringQtz { private static int counter = 0; protected

任务调度框架-Quartz.Net

使用Quartz.Net依赖于以下3个组件:Common.Logging.dll.Common.Logging.Core.dll.Quartz.dll 简单封装 1 using Quartz; 2 using Quartz.Impl; 3 using System; 4 using System.Collections.Generic; 5 using System.Linq; 6 using System.Text; 7 using System.Threading.Tasks; 8 9 na

Quartz.NET简介及入门指南

Quartz.NET简介 Quartz.NET是一个功能完备的开源调度系统,从最小的应用到大规模的企业系统皆可适用. Quartz.NET是一个纯净的用C#语言编写的.NET类库,是对非常流行的JAVA开源调度框架 Quartz 的移植. 入门指南 本入门指南包括以下内容: 下载 Quartz.NET 安装 Quartz.NET 根据你的特定项目配置 Quartz 启动一个样例程序 下载和安装 你可以下载 zip 文件或使用 Nuget 程序包.Nuget 程序包只包含 Quartz.NET 运

Quartz.NET 入门,带C#实例

概述 Quartz.NET是一个开源的作业调度框架,非常适合在平时的工作中,定时轮询数据库同步,定时邮件通知,定时处理数据等. Quartz.NET允许开发人员根据时间间隔(或天)来调度作业.它实现了作业和触发器的多对多关系,还能把多个作业与不同的触发器关联.整合了 Quartz.NET的应用程序可以重用来自不同事件的作业,还可以为一个事件组合多个作业. 参考 官方学习文档:http://www.quartz-scheduler.net/documentation/index.html 使用实例

分布式调度QUARTZ+SPRING

使用SPRING的定时任务框架,如果是在分布式的环境下,由于有多台节点,会产生相同的任务,会被多个节点执行,这时需引入分布式的QUARTZ. 触发器:存放时间排程 任务:蔟业务代码 排程器:负责调度,即在指定的时间执行对应的任务 如果是分布式QUARTZ,则各个节点会上报任务,存到数据库中,执行时会从数据库中取出触发器来执行,如果触发器的名称和执行时间相同,则只有一个节点去执行此任务. 如果此节点执行失败,则此任务则会被分派到另一节点执行. quartz.properties # =======

quartz 定时

spring3不支持quartz2 1.业务调度的类(就是你想要做的事情的逻辑部门) public class QuartzTest { public void  quartzTest(){ System.out.println("I Love You, zhuzhu"); } } 2.写一个job public class RunJob extends QuartzJobBean{ private QuartzTest quartztest; public QuartzTest ge

java计划任务调度框架quartz结合spring实现调度的配置实例代码分享

点击链接加入群[JavaEE(SSH+IntelliJIDE+Maven)]:http://jq.qq.com/?_wv=1027&k=L2rbHv 一:quartz简介 OpenSymphony 的Quartz提供了一个比较完美的任务调度解决方案. Quartz 是个开源的作业调度框架,定时调度器,为在 Java 应用程序中进行作业调度提供了简单却强大的机制. Quartz中有两个基本概念:作业和触发器.作业是能够调度的可执行任务,触发器提供了对作业的调度 二:quartz spring配置详

定时器(Quartz)快速入门

Quartz概述 Quartz中的触发器 Quartz中提供了两种触发器,分别是CronTrigger和SimpleTrigger. SimpleTrigger 每 隔若干毫秒来触发纳入进度的任务.因此,对于夏令时来说,根本不需要做任何特殊的处理来"保持进度".它只是简单地保持每隔若干毫秒来触发一次,无论你的 SimpleTrigger每隔10秒触发一次还是每隔15分钟触发一次,还是每隔24小时触发一次. CronTrigger 在特定"格林日历"时刻触发纳入进程的