quartz任务调度初次使用记录

  近期公司开发的数据交换系统嵌入了quartz任务调度功能,大概了解了任务调度的整个流程,项目中需要用到它来进行定时任务操作,对数据定时检查以及及时交换。

  Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的程序。Jobs可以做成标准的Java组件或 EJBs。Quartz的最新版本为Quartz 2.2.1。

  任务调度使用:

public class InitServlet extends HttpServlet {
        @Override
	public void init() {
		this.ChangeInfoTask();
	}
        	/***
	 * 在线监控定时监控时间配置
	 */
	public void ChangeLogTask(){
    		/// 创建一个简单的触发器 
    		CronTrigger cronTrigger = new CronTrigger("ChangeLogTask", "ChangeLogTask");
    		try {              // 设置触发时间 
    			cronTrigger.setCronExpression(new CronExpression(Configuration.getConfiguration(Constants.ChangeLogTime)));              // 定义一个具体作业ChangeLogTask,并加入ChangeLogTask组,并且绑定到具体的作业类ChangeLogJob类上 
    			JobDetail jobDetail = new JobDetail("ChangeLogTask", "ChangeLogTask",ChangeLogJob.class);               // 首先创建一个调度程序工厂      
    			SchedulerFactory schedulerFactory = new StdSchedulerFactory();              //从工厂获取一个调度程序实例 
    			Scheduler scheduler = schedulerFactory.getScheduler();              // 设置调度的具体作业和相关的触发器
    			scheduler.scheduleJob(jobDetail, cronTrigger);              //启动调度程序
    			scheduler.start();
			} catch (Exception e) {
				logger.error("配置ChangeLog查询时间失败", e);
			}
		}
	}

  在你的Job接口实现类里面,添加一些逻辑到execute()方法。一旦你配置好Job实现类并设定好调度时间表,Quartz将密切注意剩余时间。当调度程序确定该是通知你的作业的时候,Quartz框架将调用你Job实现类(作业类)上的execute()方法并允许做它该做的事情。无需报告任何东西给调度器或调用任何特定的东西。仅仅执行任务和结束任务即可。如果配置你的作业在随后再次被调用,Quartz框架将在恰当的时间再次调用它。

package com.appdept.task;

import java.util.Date;

import java.util.List;
import java.util.UUID;

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.appdept.common.constant.ServiceVariable;

import com.appdept.entity.ServerInfo;
import com.appdept.entity.exchange.ChangeLog;
import com.appdept.entity.vo.ErrorMsg;
import com.appdept.entity.vo.ServiceToActionMsg;
import com.appdept.service.iface.ChangeLogService;
import com.appdept.service.iface.ServerInfoService;
import com.appdept.util.Configuration;
import com.appdept.util.HttpClientUtil;
import com.appdept.util.SpringContextUtil;

@Service("ChangeLogService")
@Transactional
public class ChangeLogJob implements Job{
	private ChangeLogService service;
	private ServerInfoService service2;

	private String changeLogConfigure =Configuration.getConfiguration("ChangeLogConfigure");
	public void execute(JobExecutionContext arg0) throws JobExecutionException {
		this.service =	(ChangeLogService) SpringContextUtil.getBean(ServiceVariable.ChangeLogService);
		this.service2=(ServerInfoService) SpringContextUtil.getBean(ServiceVariable.ServerInfoService);
		this.allInformation();
	}

	public void addOnlineMonitoringInformation(String code,String http){
		ChangeLog changeLog=new ChangeLog();
		ServiceToActionMsg<ChangeLog> serviceToActionMsg = null;
		try {
			changeLog.setGuid(UUID.randomUUID().toString());
			changeLog.setXzqdm(code);
			changeLog.setJcsj(new Date());
			changeLog.setYxzt(this.runningState(http));
			changeLog.setBz("备用字段");
			serviceToActionMsg =service.addChangeLog(changeLog);
		}
			catch (Exception e) {
				e.printStackTrace();
				new ErrorMsg("在线监控信息存储失败!", e);
			}
	}

	public int runningState(String http){
		HttpClientUtil util = new HttpClientUtil();
		try {
			Integer t=util.getRequest(http);
			if(t==200){
				return 0;
			}
		} catch (Exception e) {
			e.printStackTrace();
			new ErrorMsg("链路检测失败!", e);
			return 1;
		}
		return 1;
	}
	public void  allInformation() {
		try {
			String[] list = changeLogConfigure.split(";");
			ServiceToActionMsg<ServerInfo> serviceToActionMsg = null;
			ServerInfo serverInfo=new ServerInfo();
			for(String info:list){
				serverInfo.setCityCode(info);
				serviceToActionMsg = service2.findServerInfo(serverInfo);
				this.addOnlineMonitoringInformation(info, serviceToActionMsg.getDataList().get(0).getTargetUrl());
			}
		} catch (Exception e) {
			e.printStackTrace();
			new ErrorMsg("查询所有行政区存储失败!", e);
		}
	}
	public String getChangeLogConfigure() {
		return changeLogConfigure;
	}
	public void setChangeLogConfigure(String changeLogConfigure) {
		this.changeLogConfigure = changeLogConfigure;
	}
}

  

  

时间: 2024-10-24 22:28:09

quartz任务调度初次使用记录的相关文章

Quartz任务调度快速入门

Quartz任务调度快速入门 概述 了解Quartz体系结构 Quartz对任务调度的领域问题进行了高度的抽象,提出了调度器.任务和触发器这3个核心的概念,并在org.quartz通过接口和类对重要的这些核心概念进行描述: ●Job:是一个接口,只有一个方法void execute(JobExecutionContext context),开发者实现该接口定义运行任务,JobExecutionContext类提供了调度上下文的各种信息.Job运行时的信息保存在JobDataMap实例中: ●Jo

Quartz任务调度快速入门(转)

概述 了解Quartz体系结构 Quartz对任务调度的领域问题进行了高度的抽象,提出了调度器.任务和触发器这3个核心的概念,并在org.quartz通过接口和类对重要的这些核心概念进行描述: ●Job:是一个接口,只有一个方法void execute(JobExecutionContext context),开发者实现该接口定义运行任务,JobExecutionContext类提供了调度上下文的各种信息.Job运行时的信息保存在 JobDataMap实例中: ●JobDetail:Quartz

quartz任务调度学习一

1.实现定时任务的几种方式: crontab 命令 + sql语句 python脚本 + sql语句 spring + JDK Timer spring + Quartz 2.Quartz概述: Quartz是java领域中最著名的定时任务调度工具,具有以下特性: 强大的调度功能 灵活的应用方式 负载均衡 高可用特性 易于spring集成 3.基础概念: Quartz 任务调度的核心元素是 scheduler, trigger 和 job,其中 trigger 和 job 是任务调度的元数据,

Quartz任务调度实践

最近在写一个任务调度程序,需要每隔几秒查询数据库,并取出数据做一些处理操作.使用到了Quartz任务调度框架. 基本概念 Quartz包含几个重要的对象,分别为任务(Job),触发器(Trigger),调度器(Scheduler) Job:一个接口只有一个方法void execute(),我们需要执行的任务就需要实现这个接口,在execute中实现我们要做的事情. JobDetail:在Quartz执行每次执行Job时,都需要创建一个Job实例,所以它直接接受一个实现类以便运行时实例化,还需要一

配置quartz任务调度框架

<properties> <quartz.version>2.2.2</quartz.version> </properties> <dependencyManagement> <dependencies> <!-- quartz任务调度框架 --> <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId&g

Quartz任务调度器

背景:              近期项目中遇到跨区调拨商品的需求,比如A区和B区,需要判断A区或者B区某种sku是否需要从对方库调拨商品来补充货源,避免因缺失商品而出现订单延误,影响销售和对用户产生不良影响. 问题:             数据量庞大,如果当查看的时候去获取数据,那么会严重影响系统的性能,甚至导致数据库和应用服务器无法响应. 解决方案:            规定在某个时间点,最好是在晚上12点时系统自动获取需要调拨的数据,然后将数据存储到数据库中.晚上12点,用户访问量和系

Quartz任务调度快速入门(转)

转自http://www.blogjava.net/baoyaer/articles/155645.html 概述 了解Quartz体系结构 Quartz对任务调度的领域问题进行了高度的抽象,提出了调度器.任务和触发器这3个核心的概念,并在org.quartz通过接口和类对重要的这些核心概念进行描述: ●Job:是一个接口,只有一个方法void execute(JobExecutionContext context),开发者实现该接口定义运行任务,JobExecutionContext类提供了调

quartz任务调度整合springMVC学习二

之前写了quartz整合spring的使用的静态调用,但实际工作中可能会需要用到动态的任务调度,不是写死在spring里面,而是可以由管理员配置怎么执行,这里就需要将quartz中trigger 和 job的信息存入数据库持久化,不过在整合springmvc前,我觉得先熟悉quartz的单独使用会更有助于学习,以下以query2.2.2为例,做了一些测试. 1.首先是创建任务调度工厂: //创建调度器工厂 SchedulerFactory schedulerFactory=new StdSche

Quartz任务调度(3)存储与持久化操作配置详细解

内存存储RAMJobStore Quartz默认使用RAMJobStore,它的优点是速度.因为所有的 Scheduler 信息都保存在计算机内存中,访问这些数据随着电脑而变快.而无须访问数据库或IO等操作,但它的缺点是将 Job 和 Trigger 信息存储在内存中的.因而我们每次重启程序,Scheduler 的状态,包括 Job 和 Trigger 信息都丢失了.Quartz 的内存 Job 存储的能力是由一个叫做 org.quartz.simple.RAMJobStore 类提供.在我们的