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

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

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

首先写一个类实现Job接口

  1. public class QuartzDemo implements Job{
  2. @Override
  3. public void execute(JobExecutionContext arg0) throws JobExecutionException {
  4. System.out.println("执行我.......");
  5. }
  6. }

然后写上各种测试实例

  1. public class Test {
  2. private static final SimpleTrigger CronTrigger = null;
  3. public static void main(String[] args){
  4. }
  5. public void test1(){
  6. //通过SchedulerFactory来获取一个调度器
  7. SchedulerFactory schedulerFactory = new StdSchedulerFactory();
  8. Scheduler scheduler;
  9. try {
  10. scheduler = schedulerFactory.getScheduler();
  11. //引进作业程序
  12. JobDetail jobDetail =
  13. new JobDetail("jobDetail-s1", "jobDetailGroup-s1", QuartzDemo.class);
  14. //new一个触发器
  15. SimpleTrigger simpleTrigger =
  16. new SimpleTrigger("simpleTrigger", "triggerGroup-s1");
  17. //设置作业启动时间
  18. long ctime = System.currentTimeMillis();
  19. simpleTrigger.setStartTime(new Date(ctime));
  20. //设置作业执行间隔
  21. simpleTrigger.setRepeatInterval(1000);
  22. //设置作业执行次数
  23. simpleTrigger.setRepeatCount(10);
  24. //设置作业执行优先级默认为5
  25. //simpleTrigger.setPriority(10);
  26. //作业和触发器设置到调度器中
  27. scheduler.scheduleJob(jobDetail, simpleTrigger);
  28. //启动调度器
  29. scheduler.start();
  30. } catch (SchedulerException e) {
  31. // TODO Auto-generated catch block
  32. e.printStackTrace();
  33. }
  34. }
  35. public void test2(){
  36. try    {
  37. SchedulerFactory schedFact  =   new  org.quartz.impl.StdSchedulerFactory();
  38. Scheduler sched  =  schedFact.getScheduler();
  39. sched.start();
  40. JobDetail jobDetail  =   new  JobDetail( " Income Report " ,
  41. " Report Generation " , QuartzDemo.class );
  42. jobDetail.getJobDataMap().put( " type " ,  " FULL " );
  43. CronTrigger trigger  =   new  CronTrigger( " Income Report " ,
  44. " Report Generation " );
  45. /**/ /*  每1分钟执行一次  */
  46. trigger.setCronExpression( "0 33 16 * * ?" );
  47. sched.scheduleJob(jobDetail, trigger);
  48. }   catch  (Exception e)   {
  49. e.printStackTrace();
  50. }
  51. }
  52. public void test3(){
  53. //通过SchedulerFactory来获取一个调度器
  54. SchedulerFactory schedulerFactory = new StdSchedulerFactory();
  55. Scheduler scheduler;
  56. try {
  57. scheduler = schedulerFactory.getScheduler();
  58. //引进作业程序
  59. JobDetail jobDetail =
  60. new JobDetail("jobDetail-s1", "jobDetailGroup-s1", QuartzDemo.class);
  61. //new一个触发器
  62. CronTrigger simpleTrigger =
  63. new CronTrigger("trigger", "group", "job", "group", "16 26/1 8-17 * * ?");
  64. // new SimpleTrigger("simpleTrigger", "triggerGroup-s1");
  65. //设置作业启动时间
  66. //Calendar excelCal = Calendar.getInstance();
  67. //excelCal.add(Calendar.DAY_OF_MONTH, 1);
  68. ///excelCal.set(Calendar.HOUR_OF_DAY, 16);
  69. //excelCal.set(Calendar.SECOND, 0);
  70. //excelCal.add(Calendar.MINUTE, 9);
  71. // long ctime = System.currentTimeMillis();
  72. // simpleTrigger.setStartTime(excelCal.getTime());
  73. //设置作业执行间隔
  74. // simpleTrigger.setRepeatInterval(1000);
  75. //设置作业执行次数
  76. // simpleTrigger.setRepeatCount(10);
  77. //设置作业执行优先级默认为5
  78. //simpleTrigger.setPriority(10);
  79. //作业和触发器设置到调度器中
  80. scheduler.scheduleJob(jobDetail, simpleTrigger);
  81. //启动调度器
  82. scheduler.start();
  83. } catch (SchedulerException e) {
  84. // TODO Auto-generated catch block
  85. e.printStackTrace();
  86. } catch (ParseException e) {
  87. // TODO Auto-generated catch block
  88. e.printStackTrace();
  89. }
  90. }
  91. }

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

  1. 1)Job类必须有默认的无参构造方法,当然不覆盖的话类本身就是无参的构造方法
  2. 2)Job的scope必须是Public类型的,因为quartz根据反射机制实例化类,如果不是public的,无法对其暴露
  3. 3)  Job类不能是内部类,原因同上,所以最好单独建类

后附加上我网上搜集的

  1. Quartz的配置文件:quartz.properties
  2. # Configure Main Scheduler Properties
  3. org.quartz.scheduler.instanceName = TestScheduler
  4. org.quartz.scheduler.instanceId = one
  5. # Configure ThreadPool
  6. org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
  7. org.quartz.threadPool.threadCount =  5
  8. org.quartz.threadPool.threadPriority = 4
  9. # Configure JobStore
  10. org.quartz.jobStore.misfireThreshold = 5000
  11. org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore
  12. 附:cronExpression配置说明
  13. 字段   允许值   允许的特殊字符
  14. 秒    0-59    , - * /
  15. 分    0-59    , - * /
  16. 小时    0-23    , - * /
  17. 日期    1-31    , - * ? / L W C
  18. 月份    1-12 或者 JAN-DEC    , - * /
  19. 星期    1-7 或者 SUN-SAT    , - * ? / L C #
  20. 年(可选)    留空, 1970-2099    , - * /
  21. 表达式   意义
  22. "0 0 12 * * ?"    每天中午12点触发
  23. "0 15 10 ? * *"    每天上午10:15触发
  24. "0 15 10 * * ?"    每天上午10:15触发
  25. "0 15 10 * * ? *"    每天上午10:15触发
  26. "0 15 10 * * ? 2005"    2005年的每天上午10:15触发
  27. "0 * 14 * * ?"    在每天下午2点到下午2:59期间的每1分钟触发
  28. "0 0/5 14 * * ?"    在每天下午2点到下午2:55期间的每5分钟触发
  29. "0 0/5 14,18 * * ?"    在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发
  30. "0 0-5 14 * * ?"    在每天下午2点到下午2:05期间的每1分钟触发
  31. "0 10,44 14 ? 3 WED"    每年三月的星期三的下午2:10和2:44触发
  32. "0 15 10 ? * MON-FRI"    周一至周五的上午10:15触发
  33. "0 15 10 15 * ?"    每月15日上午10:15触发
  34. "0 15 10 L * ?"    每月最后一日的上午10:15触发
  35. "0 15 10 ? * 6L"    每月的最后一个星期五上午10:15触发
  36. "0 15 10 ? * 6L 2002-2005"    2002年至2005年的每月的最后一个星期五上午10:15触发
  37. "0 15 10 ? * 6#3"    每月的第三个星期五上午10:15触发
  38. 特殊字符   意义
  39. *    表示所有值;
  40. ?    表示未说明的值,即不关心它为何值;
  41. -    表示一个指定的范围;
  42. ,    表示附加一个可能值;
  43. /    符号前表示开始时间,符号后表示每次递增的值;
  44. L("last")    ("last") "L" 用在day-of-month字段意思是 "这个月最后一天";用在 day-of-week字段, 它简单意思是 "7" or "SAT"。 如果在day-of-week字段里和数字联合使用,它的意思就是 "这个月的最后一个星期几" – 例如: "6L" means "这个月的最后一个星期五". 当我们用“L”时,不指明一个列表值或者范围是很重要的,不然的话,我们会得到一些意想不到的结果。
  45. W("weekday")    只能用在day-of-month字段。用来描叙最接近指定天的工作日(周一到周五)。例如:在day-of-month字段用“15W”指“最接近这个月第15天的工作日”,即如果这个月第15天是周六,那么触发器将会在这个月第14天即周五触发;如果这个月第15天是周日,那么触发器将会在这个月第16天即周一触发;如果这个月第15天是周二,那么就在触发器这天触发。注意一点:这个用法只会在当前月计算值,不会越过当前月。“W”字符仅能在day-of-month指明一天,不能是一个范围或列表。也可以用“LW”来指定这个月的最后一个工作日。
  46. #    只能用在day-of-week字段。用来指定这个月的第几个周几。例:在day-of-week字段用"6#3"指这个月第3个周五(6指周五,3指第3个)。如果指定的日期不存在,触发器就不会触发。
  47. C    指和calendar联系后计算过的值。例:在day-of-month 字段用“5C”指在这个月第5天或之后包括calendar的第一天;在day-of-week字段用“1C”指在这周日或之后包括calendar的第一天

任务调度 QUARTZ的更多相关文章

  1. spring 任务调度quartz

    简单记录一下spring任务调度quartz的例子 首先添加包 quartz-2.2.3.jar 然后写个简单的TestJob类 package com.job; import java.util.D ...

  2. java任务调度quartz框架的小例子

    quartz是一个开源的作业调度框架,当然,java可以使用Timer来实现简单任务调度的功能,但Timer是单线程的设计方案,使得一个任务延迟会影响到其他的任务.java也可以使用Scheduled ...

  3. 任务调度 -----> quartz 不同时间间隔调度任务

    Quartz Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用.Quartz可以用来创建简单或为运 ...

  4. 分布式任务调度——quartz + spring + 数据库

        项目中使用分布式并发部署定时任务,多台跨JVM,按照常理逻辑每个JVM的定时任务会各自运行,这样就会存在问题,多台分布式JVM机器的应用服务同时干活,一个是加重服务负担,另外一个是存在严重的逻 ...

  5. 任务调度--spring下的任务调度quartz

    之前写过Timer实现任务调度,这篇文章用来写一下在spring下使用quartz实现任务调度,直接上代码: 定义任务对象: package com; /** * 1. 定义任务对象 * * @aut ...

  6. spring中的任务调度Quartz

    Spring 整合 Quartz 任务调度 主要有两种方式. Quartz的官网:http://www.quartz-scheduler.org/ 这两种只是一些配置文件简单配置就OK了,但是根本无法 ...

  7. 任务调度quartz整理

    一张图,了解quartz运行机制: 此图表示:Scheduler是容器,Trigger是多个触发器,jobDetail是多个任务,Calendar是多个日历. jobDetail任务,需要指定类实现J ...

  8. 任务调度 Quartz 学习(一) SimpleTrigger

    概述: 在实际开发过程中,会遇到很多任务调度的需求. 比如说:某网站要在每周一上午9点更新网站数据,并发邮件通知用户: 再比如某论坛需求:每隔半个小时生成精华文章的RSS文件,每天凌晨统计论坛用户的积 ...

  9. 任务调度Quartz.Net之Windows Service

    这个应该是关于Quartz.Net使用的最后一篇文章了,之前的介绍都是基于Web的,这种实现任务调度的方式很少见,因为不管是MVC.WebApi还是WebService,它们都需要寄宿在IIS上运行, ...

随机推荐

  1. javaScript之 变量、作用域和内存问题

    <javaScript高级程序设计>第四章  读书笔记 4.1  基本类型 和 引用类型 的值 1. 基本类型值 包括:Undefined.Null.Boolean.Number 和 St ...

  2. HTML文件中使用Java程序

    HTML文件中使用Java程序:简而言之,在HTML文件中引入java应用程序,并通过javascript调用其方法.   一. 运行环境 1.JAVA_HOME.CLASSPATH.PATH配置正确 ...

  3. poj 3268 Silver Cow Party

                                                                                                       S ...

  4. Fedora 19 vim c语言开发环境

    1. Fedora 19 居然没有自带 gcc 和 g++: sudo yum -y install gcc gcc-c++ 2. 安装 vim 和 cvim 插件: sudo yum -y vim ...

  5. 取代file_get_contents 的一个采集函数

    function url_get_content($url=''){ $ch = curl_init(); $timeout = 100; $browser = 'Mozilla/5.0 (Windo ...

  6. NodeJs菜鸟初始

    我们先来了解下什么是nodejs 一.nodejs具有事件驱动.异步编程的特点. 事件驱动这个词并不陌生,在某些传统语言的网络编程中,我们会用到回调函数,比如当socket资源达到某种状态时,注册的回 ...

  7. 无DLL线程注入

    注意要在release方式编译 //线程函数 DWORD WINAPI RemoteThreadProc(LPVOID lpParam) {      PDATA pData = (PDATA)lpP ...

  8. Optimize str2date function

    The job can be any string date format convert to AX date format. so that, Do not need to specify str ...

  9. python学习第六天

    一. 模块介绍1. 模块的定义:用一堆代码实现了某个功能的代码集合     包的定义:本质就是一个目录(必须导游一个_init_.py文件),是用来从逻辑上组织模块的.2. 需要多个函数才能完成(函数 ...

  10. 全民wifi钓鱼来临----agnes安卓wifi钓鱼神器介绍

    断断续续搞了一些无线的东西,从bt5的aircrack-ng的破无线(没怎么成功过)其实EWSA这个用GPU跑还算不错,可惜了我这显卡也只能每秒2500,到用c118在OsmocomBB基础上进行gs ...