Quartz CronTrigger最完整配置说明和写的例子。

CronTrigger教程

----------------------------------------------------------------------

还要引入jar 包 quartz-all-1.6.4.jar,下面的例子我用的是 quartz-all-1.6.4.jar

如果服务器不同,

可以用不同的jar 包

quartz-jboss-1.6.4.jar
quartz-oracle-1.6.4.jar
quartz-weblogic-1.6.4.jar

介绍
cron是一个在UNIX系统上已使用了很长时间的工具,它已经被证明拥有强大的任务调度能力。类CronTrigger就是以cron的这种任务调度能力为基础的。
CronTrigger使用“cron表达式“。cron表达式能够创建任务触发计划,例如“每周一至周五的早晨8点整”或者“每月最后一个周五的下午1点半”。
cron表达式很强大,但是也很容易迷惑。这篇教程的目标就是找出创建cron表达式的难点,使用户在去论坛或邮件列表求助前 ,有一个优先访问的资源。

格式
一个cron表达式是由6至7个字段所组成。这些字段使用空格分隔,可以是任意允许的值。具体见下表:

字段名           必须       有效值                      有效字符
秒                 是          0 至 59                         , - * /
分钟               是          0 至 59                         , - * /
小时               是          0 至 23                         , - * /
Day of month       是          1 至 31                         , - * ? / L W
月                 是          1 至 12 或 JAN 至 DEC           , - * /
Day of week        是          1 至 7 或 SUN 至 SAT            , - * ? / L #
年                 否          空,1970 至 2099                , - * /

所以cron表达式即可以很简单(如:* * * * * ?),
也可以很复杂(如:0 0/5 14,18,3-39,52 ? JAN,MAR,SEP MON-FRI 2002-2010)。

有效字符
  • “*”(所有有效值)——表示该字段所有有效值。例如分钟字段的“*”表示“每一分钟”。
  • “?”(无特定值)——只能在day of month字段与day of week字段出现,且二者只能选一。表示无特定值,可以忽略。例如我想每月10号触发任务,而不管10号是周几。那么就可以在day of month字段设置“10”,而day of week字段设置“?”。具体看下面的例子。
  • “-”——指定一个范围。例如小时字段的“10-12”,就意味着“10点、11点、12点”。
  • “,”——指定额外的值。例如day of week字段的“MON,WED,FRI”,就意味着“星期一、星期三、星期五”。
  • “/”——指定值的增长步长。例如秒字段的“0/15”,就意味着“0秒、15秒、30秒、45秒”。秒字段的“5/15”,就意味着“5秒、20秒、35秒、50秒”。Day of month字段的“1/3”,就意味着“从每个月的1号开始,每三天一次”。
  • “L”(最后)—— 只能在day of month字段与day of week字段出现,且意义不同。例如字段day of month的“L”,就意味着“每月最后一天”——一月31号、非闰年的二月28号。如果使用在day of week字段,就意味着“7”或者“SAT”——周六。但是如果使用在day of week字段的一个值X的后面,就意味着“每月的最后一个星期X”。例如“6L”表示“每月最后一个周五”。需要注意的是,当使用“L”时不能使用“,”、“-”。
  • “W”(工作日)——选择离给定日期最近的工作日(周一至周五)。例如你指定“15W”作为day of month字段的值,就意味着“每个月与15号最近的工作日”。所以,如果15号是周六,则触发器会在14号(周五)触发。如果15号是周日,则触发器会在16号(周一)触发。如果15号是周二,则触发器会在15号(周二)触发。但是,如果你指定“1W”作为day of month字段的值,且1号是周六,则触发器会在3号(周一)触发。quartz不会“跳出”月份的界限。需要注意的是,当使用“W”时不能使用“,”、“-”。
“L”与“W”可在day of month字段联合使用“LW”,表到“每月的最后一个工作日”
  • “#”——指定每月第几个星期X。例如day of week字段的“6#3”,就意味着“每月第3个星期五”(day3=星期五,#3=第三个);“2#1”就意味着“每月第1个星期一”;“4#5”就意味着“每月第5个星期3。需要注意的是“#5”,如果在当月没有第5个星期三,则触发器不会触发。
合法的有效字符(如月份名字与星期名字)是大小写不敏感的。MON与mon是相同的。

例子
以下是一些完整的例子:

cron表达式                  含义
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分,每分钟触发一次
0 0/5 14 * * ?                 每天的2点整至2点55分,每5分钟触发一次
0 0/5 14,18 * * ?              每天的2点整至2点55分以及18点整至18点55分,每5分钟触发一次
0 0-5 14 * * ?                 每天的2点整至2点5分,每分钟触发一次
0 10,44 14 ? 3 WED             每年3月的每个星期三的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                 每月最后一个周五的10点15分触发一次
0 15 10 ? * 6L 2002-2005       2002年至2005年间,每月最后一个周五的10点15分触发一次
0 15 10 ? * 6#3                每月第三个周五的10点15触发一次
0 0 12 1/5 * ?                 每月1号开始,每5天的12点整触发一次

0 11 11 11 11 ?                每年11月11日11点11分触发一次


------------------------------------------------------------------------------------

我写了一个类!!!!!!!!!!

/**
 *
 */
package com.budco.bmp.action.maintenance.temptest;

import java.text.ParseException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;

import org.quartz.CronTrigger;

import com.budco.bmp.core.util.DateUtil;

/**
 * @author ale
 *
 */
public class TestScheduleDate {

    public static final String DATE_FORMAT_MONTH_DAY_YEAR_HOUR_MIN_AM_PM = "MM/dd/yyyy hh:mma";
    // trigger
    private final static String TRIGGER_PREVIEW_SCHEDULE = "triggerPreviewSchedule";
    protected final static String GROUP_PREVIEW_SCHEDULE = "groupPreviewSchedule";

    /**
     *
     */
    public TestScheduleDate() {
        // TODO Auto-generated constructor stub
    }

    protected List<Date> getNext10Schedules(final String cron) throws ParseException {
        final List<Date> results = new ArrayList<Date>();

        final CronTrigger cronTrigger = new CronTrigger(TRIGGER_PREVIEW_SCHEDULE, GROUP_PREVIEW_SCHEDULE, cron);

        Date firedate = new Date();
        for (int i = 0; i < 10; i++) {
            firedate = cronTrigger.getFireTimeAfter(firedate);
            results.add(firedate);
        }
        return Collections.unmodifiableList(results);
    }

    /**
     * @param args
     * @throws ParseException
     */
    public static void main(final String[] args) throws ParseException {
        // TODO Auto-generated method stub
        final TestScheduleDate tsd = new TestScheduleDate();
        // protected static String default_cron = "0 * * * * ?";
        // final String default_cron = "0 0/5 16,17 * * ?";
        // final String default_cron = "0 15 10 * * ? *";
        // final String default_cron = "0 10,30 14 ? 3 WED";
        // final String default_cron = "0 11 11 11 11 ?";

         // final String default_cron = "0 15 10 ? * MON-FRI";   // 表示周一到周五每天上午1015执行作业

        final String default_cron = "0 15 10 ? * 6L 2011-2012";//2011年至2012年间,每月最后一个周五的10点15分触发一次
        final List<Date> dateList = tsd.getNext10Schedules(default_cron);
        final List<String> results = new ArrayList<String>();
        for (final Date da : dateList) {
            results.add(DateUtil.format(da, DATE_FORMAT_MONTH_DAY_YEAR_HOUR_MIN_AM_PM));
        }

        for (final String str : results) {
            System.out.println(str);

        }
    }

}
打印结果:

//2011年至2012年间,每月最后一个周五的10点15分触发一次

07/29/2011 10:15AM
08/26/2011 10:15AM
09/30/2011 10:15AM
10/28/2011 10:15AM
11/25/2011 10:15AM
12/30/2011 10:15AM
01/27/2012 10:15AM
02/24/2012 10:15AM
03/30/2012 10:15AM
04/27/2012 10:15AM



你可能感兴趣的:(Date,quartz,String,任务调度,cron,Constructor)