`
JavaCrazyer
  • 浏览: 2992129 次
  • 性别: Icon_minigender_1
  • 来自: 河南
社区版块
存档分类

Quartz使用示例总结

阅读更多

 任务调度在目前的JAVA应用程序中运用的十分普遍,故掌握QUARTZ是必备的技能

闲话少说,上官网:http://www.quartz-scheduler.org/ 下载最新1.80资源包

commons-logging log4j sff4j 等jar包要添加进去,quartz的jar包则肯定必须

 首先写一个类实现Job接口

public class QuartzDemo implements Job{

	@Override
	public void execute(JobExecutionContext arg0) throws JobExecutionException {
		System.out.println("执行我.......");
		
	}

}

 

然后写上各种测试实例

public class Test {
    private static final SimpleTrigger CronTrigger = null;

	public static void main(String[] args){
    }
	
	public void test1(){
		  //通过SchedulerFactory来获取一个调度器
        SchedulerFactory schedulerFactory = new StdSchedulerFactory();
        Scheduler scheduler;
		try {
			scheduler = schedulerFactory.getScheduler();
		
        
        
        
        //引进作业程序
        JobDetail jobDetail = 
        new JobDetail("jobDetail-s1", "jobDetailGroup-s1", QuartzDemo.class);

         //new一个触发器
        SimpleTrigger simpleTrigger = 
        new SimpleTrigger("simpleTrigger", "triggerGroup-s1");


        //设置作业启动时间

        long ctime = System.currentTimeMillis(); 
        simpleTrigger.setStartTime(new Date(ctime));


        //设置作业执行间隔 
        simpleTrigger.setRepeatInterval(1000);

        //设置作业执行次数
        simpleTrigger.setRepeatCount(10);

        //设置作业执行优先级默认为5
        //simpleTrigger.setPriority(10);


        //作业和触发器设置到调度器中
        scheduler.scheduleJob(jobDetail, simpleTrigger);
        
        //启动调度器
        scheduler.start();
		} catch (SchedulerException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	public void test2(){

		try    {
            SchedulerFactory schedFact  =   new  org.quartz.impl.StdSchedulerFactory();
            Scheduler sched  =  schedFact.getScheduler();
            sched.start();
            JobDetail jobDetail  =   new  JobDetail( " Income Report " ,
                     " Report Generation " , QuartzDemo.class );
            jobDetail.getJobDataMap().put( " type " ,  " FULL " );
            CronTrigger trigger  =   new  CronTrigger( " Income Report " ,
                     " Report Generation " );
             /**/ /*  每1分钟执行一次  */ 
            trigger.setCronExpression( "0 33 16 * * ?" );
            sched.scheduleJob(jobDetail, trigger);
        }   catch  (Exception e)   {
            e.printStackTrace();
        } 
	}
	
	public void test3(){
		 //通过SchedulerFactory来获取一个调度器
      SchedulerFactory schedulerFactory = new StdSchedulerFactory();
      Scheduler scheduler;
		try {
			scheduler = schedulerFactory.getScheduler();  
      //引进作业程序
      JobDetail jobDetail = 
      new JobDetail("jobDetail-s1", "jobDetailGroup-s1", QuartzDemo.class);
       //new一个触发器
      CronTrigger simpleTrigger = 
      	new CronTrigger("trigger", "group", "job", "group", "16 26/1 8-17 * * ?");
     // new SimpleTrigger("simpleTrigger", "triggerGroup-s1");


      //设置作业启动时间
  	//Calendar excelCal = Calendar.getInstance();
		//excelCal.add(Calendar.DAY_OF_MONTH, 1);
		///excelCal.set(Calendar.HOUR_OF_DAY, 16);
		//excelCal.set(Calendar.SECOND, 0);
		//excelCal.add(Calendar.MINUTE, 9);
     // long ctime = System.currentTimeMillis(); 
     // simpleTrigger.setStartTime(excelCal.getTime());
      //设置作业执行间隔 
     // simpleTrigger.setRepeatInterval(1000);
      //设置作业执行次数
     // simpleTrigger.setRepeatCount(10);
      //设置作业执行优先级默认为5
      //simpleTrigger.setPriority(10);
        
      //作业和触发器设置到调度器中
      scheduler.scheduleJob(jobDetail, simpleTrigger);
      
      //启动调度器
      scheduler.start();
		} catch (SchedulerException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
	}
	
}

 需要注意的几点是经常会出现org.quartz.core.ErrorLogger : An error occured instantiating job to be executed.....这种异常,解决办法是

 

1)Job类必须有默认的无参构造方法,当然不覆盖的话类本身就是无参的构造方法

2)Job的scope必须是Public类型的,因为quartz根据反射机制实例化类,如果不是public的,无法对其暴露

3)  Job类不能是内部类,原因同上,所以最好单独建类

 

后附加上我网上搜集的

Quartz的配置文件:quartz.properties
# Configure Main Scheduler Properties 
org.quartz.scheduler.instanceName = TestScheduler
org.quartz.scheduler.instanceId = one
# Configure ThreadPool 
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount =  5
org.quartz.threadPool.threadPriority = 4
# Configure JobStore 
org.quartz.jobStore.misfireThreshold = 5000
org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore


附:cronExpression配置说明

字段   允许值   允许的特殊字符 
秒    0-59    , - * / 
分    0-59    , - * / 
小时    0-23    , - * / 
日期    1-31    , - * ? / L W C 
月份    1-12 或者 JAN-DEC    , - * / 
星期    1-7 或者 SUN-SAT    , - * ? / L C # 
年(可选)    留空, 1970-2099    , - * / 


表达式   意义 
"0 0 12 * * ?"    每天中午12点触发 
"0 15 10 ? * *"    每天上午10:15触发 
"0 15 10 * * ?"    每天上午10:15触发 
"0 15 10 * * ? *"    每天上午10:15触发 
"0 15 10 * * ? 2005"    2005年的每天上午10:15触发 
"0 * 14 * * ?"    在每天下午2点到下午2:59期间的每1分钟触发 
"0 0/5 14 * * ?"    在每天下午2点到下午2:55期间的每5分钟触发  
"0 0/5 14,18 * * ?"    在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发  
"0 0-5 14 * * ?"    在每天下午2点到下午2:05期间的每1分钟触发 
"0 10,44 14 ? 3 WED"    每年三月的星期三的下午2:10和2:44触发 
"0 15 10 ? * MON-FRI"    周一至周五的上午10:15触发 
"0 15 10 15 * ?"    每月15日上午10:15触发 
"0 15 10 L * ?"    每月最后一日的上午10:15触发 
"0 15 10 ? * 6L"    每月的最后一个星期五上午10:15触发   
"0 15 10 ? * 6L 2002-2005"    2002年至2005年的每月的最后一个星期五上午10:15触发 
"0 15 10 ? * 6#3"    每月的第三个星期五上午10:15触发  

特殊字符   意义 
*    表示所有值; 
?    表示未说明的值,即不关心它为何值; 
-    表示一个指定的范围; 
,    表示附加一个可能值; 
/    符号前表示开始时间,符号后表示每次递增的值; 
L("last")    ("last") "L" 用在day-of-month字段意思是 "这个月最后一天";用在 day-of-week字段, 它简单意思是 "7" or "SAT"。 如果在day-of-week字段里和数字联合使用,它的意思就是 "这个月的最后一个星期几" – 例如: "6L" means "这个月的最后一个星期五". 当我们用“L”时,不指明一个列表值或者范围是很重要的,不然的话,我们会得到一些意想不到的结果。 
W("weekday")    只能用在day-of-month字段。用来描叙最接近指定天的工作日(周一到周五)。例如:在day-of-month字段用“15W”指“最接近这个月第15天的工作日”,即如果这个月第15天是周六,那么触发器将会在这个月第14天即周五触发;如果这个月第15天是周日,那么触发器将会在这个月第16天即周一触发;如果这个月第15天是周二,那么就在触发器这天触发。注意一点:这个用法只会在当前月计算值,不会越过当前月。“W”字符仅能在day-of-month指明一天,不能是一个范围或列表。也可以用“LW”来指定这个月的最后一个工作日。  
#    只能用在day-of-week字段。用来指定这个月的第几个周几。例:在day-of-week字段用"6#3"指这个月第3个周五(6指周五,3指第3个)。如果指定的日期不存在,触发器就不会触发。  
C    指和calendar联系后计算过的值。例:在day-of-month 字段用“5C”指在这个月第5天或之后包括calendar的第一天;在day-of-week字段用“1C”指在这周日或之后包括calendar的第一天 

 

 

25
1
分享到:
评论
5 楼 mrwalter 2015-03-03  
例子挺齐全的,谢谢。学习了
4 楼 joedan0104 2014-09-03  
挺不错的,定时任务要用到此技术
3 楼 Mr_lioo 2014-09-01  
不错,感谢分享
2 楼 jzzwy 2014-07-09  
浏览10000是我刷出来的~~
1 楼 shihengli2010 2014-05-15  
浏览10000是我刷出来的~~

相关推荐

    spring quartz学习总结: cluster的配置和示例

    NULL 博文链接:https://shmilyaw-hotmail-com.iteye.com/blog/2169156

    quartz学习总结

    quartz学习总结 本文使用一系列代码示例介绍 Quartz.NET API,演示它的机制,例如作业、触发器、作业仓库。 Quartz.NET是一个开源的作业调度框架,是OpenSymphony 的 Quartz API

    java实用工具实例

    包含activeMq,email发送,excel导出,接口方法,quartz定时任务,redis工具类,socket等技术的应用实例,以及接口和多线程的知识总结,适合学习和面试。

    Spring.3.x企业应用开发实战(完整版).part2

    13.3 在Spring中使用Quartz 13.3.1 创建JobDetail 13.3.2 创建Trigger 13.3.3 创建Scheduler 13.4 Spring中使用JDK Timer 13.4.1 Timer和TimerTask 13.4.2 Spring对JDK Timer的支持 13.5 Spring对JDK 5.0 Executor的...

    Spring3.x企业应用开发实战(完整版) part1

    13.3 在Spring中使用Quartz 13.3.1 创建JobDetail 13.3.2 创建Trigger 13.3.3 创建Scheduler 13.4 Spring中使用JDK Timer 13.4.1 Timer和TimerTask 13.4.2 Spring对JDK Timer的支持 13.5 Spring对JDK 5.0 Executor的...

    Spring中文帮助文档

    3.7.3. 使用FactoryBean定制实例化逻辑 3.8. The ApplicationContext 3.8.1. BeanFactory 还是 ApplicationContext? 3.8.2. 利用MessageSource实现国际化 3.8.3. 事件 3.8.4. 底层资源的访问 3.8.5. ...

    Spring API

    3.7.3. 使用FactoryBean定制实例化逻辑 3.8. The ApplicationContext 3.8.1. BeanFactory 还是 ApplicationContext? 3.8.2. 利用MessageSource实现国际化 3.8.3. 事件 3.8.4. 底层资源的访问 3.8.5. ...

    Spring 2.0 开发参考手册

    3.7.3. 使用FactoryBean定制实例化逻辑 3.8. ApplicationContext 3.8.1. 利用MessageSource实现国际化 3.8.2. 事件 3.8.3. 底层资源的访问 3.8.4. ApplicationContext在WEB应用中的实例化 3.9. 粘合代码和可怕...

    《iPhone开发实战》.(Christopher Allen).pdf

    17.4.2 使用位置和距离的示例266 17.4.3 使用海拔的示例268 17.4.4 core location和互联网270 17.5 小结271 第18章 媒体:图像和声音272 18.1 图像介绍272 18.1.1 加载uiimage272 18.1.2 绘制...

    Spring-Reference_zh_CN(Spring中文参考手册)

    3.7.3. 使用FactoryBean定制实例化逻辑 3.8. ApplicationContext 3.8.1. 利用MessageSource实现国际化 3.8.2. 事件 3.8.3. 底层资源的访问 3.8.4. ApplicationContext在WEB应用中的实例化 3.9. 粘合代码和可怕的...

    spring chm文档

    3.7.3. 使用FactoryBean定制实例化逻辑 3.8. ApplicationContext 3.8.1. 利用MessageSource实现国际化 3.8.2. 事件 3.8.3. 底层资源的访问 3.8.4. ApplicationContext在WEB应用中的实例化 3.9. 粘合代码和可怕...

Global site tag (gtag.js) - Google Analytics