zoukankan      html  css  js  c++  java
  • 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;
    	}		
    }
    

      

      

  • 相关阅读:
    Java中Collections的min和max方法
    Java中Collections的frequency方法
    Java中Collections的binarySearch方法
    uniapp 样式记录
    uniapp记录
    uniapp 弹窗输入
    uniapp 扫描
    uniapp for显示数据改变时,绑定的list值同时改变
    dev随笔记录
    easyui 使用技巧
  • 原文地址:https://www.cnblogs.com/HEWU10/p/quartz.html
Copyright © 2011-2022 走看看