zoukankan      html  css  js  c++  java
  • quartz 2.1学习(一)

    quartz是一种开源任务调度框架,提供了强大的任务调度机制,Quartz允许开发人员灵活地定义触发器的调度时间表,并可对触发器和任务进行关联映射。废话不多说了,介绍一下编程的基本步骤:

    1. 实现Job接口,编码实现需要执行的任务。
    2. 定义jobdetail对象,这个对象需要job实现类作为参数
    3. 定义trigger,trigger就是一个时间表,定义什么时候来执行任务,主要分为simpletrigger和crontrigger两个子类,前者适用于简单情况:只执行一次或者固定间隔执行;后者使用表达式来灵活调度任务的执行。
    4. 定义schedulefactory实例,从schedulefactory工厂中获取schedule对象。schedule就像一个容器,里面放入任务和时间表,将某个任务和某个时间表绑定,就可以让任务按照指定的时间执行。其实schedule就是一个线程池。
    下面是个例子:
    package quartz;
    
    import java.util.Date;
    
    import org.quartz.Job;
    import org.quartz.JobDataMap;
    import org.quartz.JobExecutionContext;
    import org.quartz.JobExecutionException;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    /**
     * Copyright
     * <br/>Program Name:TestJavaProject
     * <br/>Comments:
     * <br/>JDK version used:
     * <br/>Create Date:2013-7-17
     * @author LA
     * @version
     */
    public class SimpleJob implements Job{
    	private Logger logger=LoggerFactory.getLogger(SimpleJob.class);
    	@Override
    	public void execute(JobExecutionContext jobCtx) throws JobExecutionException {
    		System.out.println("I can count to 10->");
    		//输出1-10
    		for(int i=1;i<=10;i++){
    			System.out.println(" | "+i+" ");
    			try {
    				Thread.sleep(1000);
    			} catch (InterruptedException e) {
    				// TODO: handle exception
    			}
    		}
    		System.out.println("<-See  I did it.");
    		JobDataMap properties=jobCtx.getJobDetail().getJobDataMap();
    		System.out.println("Previous fire time: "+jobCtx.getPreviousFireTime());
    		System.out.println("curent file time: "+jobCtx.getFireTime());
    		System.out.println("next fire time: "+jobCtx.getNextFireTime());
    	}
    
    }
    

    package quartz;
    
    import org.quartz.CronScheduleBuilder;
    import org.quartz.CronTrigger;
    import org.quartz.JobBuilder;
    import org.quartz.JobDetail;
    import org.quartz.Scheduler;
    import org.quartz.SchedulerFactory;
    import org.quartz.SimpleScheduleBuilder;
    import org.quartz.TriggerBuilder;
    import org.quartz.impl.StdSchedulerFactory;
    
    /**
     * Copyright
     * <br/>Program Name:TestJavaProject
     * <br/>Comments:
     * <br/>JDK version used:
     * <br/>Create Date:2013-7-17
     * @author LA
     * @version
     */
    public class CronTriggerRunner {
    
    	/**
    	 * @param args
    	 */
    	public static void main(String[] args) {
    		try {
    			JobDetail jobDetail=JobBuilder.newJob(SimpleJob.class).withIdentity("myjob", "job-group").build();
    			CronTrigger cronTrigger=TriggerBuilder.newTrigger().withIdentity("cronTrigger", "trigger-group").withSchedule(CronScheduleBuilder.cronSchedule("0/5 * * * * ?")).build();
    			SchedulerFactory sFactory=new StdSchedulerFactory();
    			Scheduler scheduler=sFactory.getScheduler();
    			scheduler.scheduleJob(jobDetail, cronTrigger);
    			scheduler.start();
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
    
    }
    

    其中定义crontrigger对象时,使用“0/5 * * * * ?”来表示执行的时间表,意思是从0s开始,每隔5秒执行一次,每分每时每天每月。其中0/5的意思是:从0开始,每隔5,即0,5,10.。。。;“*”表示通配,“?”表示占位,没有意义。更多的表达式写法可以查阅相关资料
  • 相关阅读:
    主效应|处理误差 |组间误差|处理效应|随机误差|组内误差|误差|效应分析|方差齐性检验|SSE|SSA|SST|MSE|MSA|F检验|关系系数|完全随机化设计|区组设计|析因分析
    第二类错误|检验统计量|左偏|右偏|P值
    估计量|估计值|置信度|置信水平|非正态的小样本|t分布|大样本抽样分布|总体方差|
    参数|统计量|抽样分布|估计标准误差|标准误差|标准误|标准差|二项分布|泊松分布|中心极限定理|样本方差|
    ruby 分析日志,提取特定记录
    find 找出大文件
    momentjs 求小时差异
    linux下对date和timestamp的互转
    golang protobuf SetExtension
    对文本中的某两列求和,请统计重复出现次数
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3196550.html
Copyright © 2011-2022 走看看