`

Quartz之AnnualCalendar

阅读更多
问题1 我想排除一年中的某一天,怎么办呢!
Quartz:使用AnnualCalendar进行相应的设置
参考资料
1 Quartz入门简介三
http://wwwzchen.iteye.com/blog/846099
2 quartz 学习笔记
http://chinaxxren.iteye.com/blog/897989
Quartz的BaseCalendar层次结构如下:

在本例中主要用到了AnnualCalendar,它的作用是排除排除每一年中指定的一天或多天.
AnnualCalendar类说明如下:
This implementation of the Calendar excludes a set of days of the year. You may use it to exclude bank holidays which are on the same date every year. 

其它相应的有:CronCalendar(表达式),DailyCalendar(指定的时间范围内的每一天),HolidayCalendar(排除节假日),MonthlyCalendar(排除月份中的数天),WeeklyCalendar(排除星期中的一天或多天)
具体代码如下:
 //法定节日是以每年为周期的,所以使用AnnualCalendar  
        AnnualCalendar holidays = new AnnualCalendar();        
        // ②五一劳动节  
        Calendar laborDay = new GregorianCalendar();  
        laborDay.add(Calendar.MONTH, 5);  
        laborDay.add(Calendar.DATE, 1);  
        // ②-1:排除的日期,如果设置为false则为包含  
        holidays.setDayExcluded(laborDay, true);  
        // ③国庆节  
        Calendar nationalDay = new GregorianCalendar();  
        nationalDay.add(Calendar.MONTH, 10);  
        nationalDay.add(Calendar.DATE, 1);  
        // ③-1:排除该日期  
        holidays.setDayExcluded(nationalDay, true);          
        //添加到时间集合到任务调度器中
        sched.addCalendar("holidays", holidays, false,false);           
        //当前时间15秒后运行
        Date startTime = nextGivenSecondDate(null, 15);
        //绑定任务
        JobDetail job = newJob(SimpleJob.class)
            .withIdentity("job1", "group1")
            .build();        
        //触发器
        SimpleTrigger trigger = newTrigger() 
            .withIdentity("trigger1", "group1")
            .startAt(startTime)
            .withSchedule(simpleSchedule()
                    .withIntervalInHours(1)//重复间隔:小时为单位
                    .repeatForever())
            .modifiedByCalendar("holidays")
            .build();        
       
        //运行时间
        Date firstRunTime = sched.scheduleJob(job, trigger);       
        log.error(job.getKey() +
                " will run at: " + firstRunTime +  
                " and repeat: " + trigger.getRepeatCount() + 
                " times, every " + trigger.getRepeatInterval() / 1000 + " seconds");        
      
        //启动调度器
        sched.start();
  • 大小: 9 KB
分享到:
评论

相关推荐

    Quartz使用总结

    import org.quartz.impl.calendar.AnnualCalendar; public class QuartzTest { public static void main(String[] args) { try { // 创建scheduler Scheduler scheduler = StdSchedulerFactory....

    Quartz学习文档

    Quartz提供了多种类型的Calendar实现,如`AnnualCalendar`、`MonthlyCalendar`和`WeeklyCalendar`,用于按年、月、周定义排除规则。 在实际使用中,开发者首先需要创建JobDetail对象,定义任务的实现类和相关信息。...

    Quartz任务调度快速入门

    Quartz提供了AnnualCalendar、MonthlyCalendar和WeeklyCalendar等实现,方便对不同时间段进行定制。 5. **Scheduler**: Scheduler是Quartz的核心,它是一个独立的运行容器,负责管理和调度JobDetail和Trigger。...

    任务调度框架Quartz[收集].pdf

    Quartz提供了AnnualCalendar、MonthlyCalendar、WeeklyCalendar等实现,帮助开发者定义不同时间粒度的排除规则。 Scheduler是Quartz的运行核心,它管理所有的Trigger和JobDetail。每个Trigger和JobDetail都有自己的...

    Quartz集群配置[定义].pdf

    此外,Quartz提供了一系列预定义的Calendar实现,如AnnualCalendar、MonthlyCalendar和WeeklyCalendar,方便根据不同的时间段进行调度。 Scheduler作为Quartz的运行容器,可以注册Trigger和JobDetail,并通过组和...

    quartz教程

    Quartz提供了多种`Calendar`实现,如`AnnualCalendar`、`MonthlyCalendar`和`WeeklyCalendar`,分别针对不同的时间周期进行定制。 #### 五、总结 Quartz不仅是一个强大的任务调度框架,它还通过其丰富的特性(如...

    Job 任务介绍

    - **实现类**: 在 `org.quartz.impl.calendar` 包下提供了一些具体的实现类,如 `AnnualCalendar`、`MonthlyCalendar` 和 `WeeklyCalendar` 等,分别针对每年、每月和每周进行定义。 - **Scheduler (调度器)** - ...

Global site tag (gtag.js) - Google Analytics