Quartz框架基于Calendar的排除规则

如果要在触发器的基础上,排除一些时间区间不执行任务,就要用到 Quartz的Calendar类(注意不是 JDK的 Calendar)。可以按年、月、周、日、特定日期、Cron表达式排除。

调用 Trigger的 modifiedByCalendar()添加到触发器中,并且调用调度器的addCalendar()方法注册排除规则。

public class CalendarDemo {
    public static void main(String[] args) throws Exception {
        SchedulerFactory sf = new StdSchedulerFactory();
        Scheduler scheduler = sf.getScheduler();
        scheduler.start();

        // 定义日历
        AnnualCalendar holidays = new AnnualCalendar();

        // 排除咕泡日
        Calendar gupaoDay = (Calendar) new GregorianCalendar(2019, 8, 8);
        holidays.setDayExcluded(gupaoDay, true);
        // 排除中秋节
        Calendar midAutumn = new GregorianCalendar(2019, 9, 13);
        holidays.setDayExcluded(midAutumn, true);
        // 排除圣诞节
        Calendar christmas = new GregorianCalendar(2019, 12, 25);
        holidays.setDayExcluded(christmas, true);

        // 调度器添加日历
        scheduler.addCalendar("holidays", holidays, false, false);

        JobDetail jobDetail = JobBuilder.newJob(MyJob1.class)
                .withIdentity("job1", "group1")
                .usingJobData("leon","2673")
                .build();

        Trigger trigger = TriggerBuilder.newTrigger()
                .withIdentity("trigger1", "group1")
                .startNow()
                .modifiedByCalendar("holidays")
                .withSchedule(SimpleScheduleBuilder.simpleSchedule()
                        .withIntervalInSeconds(2)
                        .repeatForever())
                .build();

        Date firstRunTime = scheduler.scheduleJob(jobDetail, trigger);
        System.out.println(jobDetail.getKey() + " 第一次触发: " + firstRunTime);
    }
}
Calendar 名称用法
BaseCalendar为高级的Calendar 实现了基本的功能,实现了org.quartz.Calendar 接口
AnnualCalendar排除年中一天或多天
CronCalendar日历的这种实现排除了由给定的CronExpression 表达的时间集合。例如,
您可以使用此日历使用表达式“* * 0-7,18-23?* *”每天排除所有营业时
间(上午8 点至下午5 点)。如果CronTrigger 具有给定的cron 表达式并
且与具有相同表达式的CronCalendar 相关联,则日历将排除触发器包含的
所有时间,并且它们将彼此抵消。
DailyCalendar您可以使用此日历来排除营业时间(上午8 点- 5 点)每天。每个
DailyCalendar 仅允许指定单个时间范围,并且该时间范围可能不会跨越每
日边界(即,您不能指定从上午8 点至凌晨5 点的时间范围)。如果属
性invertTimeRange 为false(默认),则时间范围定义触发器不允许触发
的时间范围。如果invertTimeRange 为true,则时间范围被反转- 也就是
排除在定义的时间范围之外的所有时间。
HolidayCalendar特别的用于从Trigger 中排除节假日
MonthlyCalendar排除月份中的指定数天,例如,可用于排除每月的最后一天
WeeklyCalendar排除星期中的任意周几,例如,可用于排除周末,默认周六和周日

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
QuartzJobBean 是 Quartz 框架中的一个类,用于编写定时任务的具体执行逻辑。而 Quartz 框架是一个用于调度和执行定时任务的开源框架。 异同点如下: 1. 定时任务编写方式:在 Quartz 框架中,可以使用不同的方式编写定时任务,包括实现 Job 接口、继承 QuartzJobBean 类或使用注解等。而 QuartzJobBean 是一种编写定时任务的方式,它是一个抽象类,继承它可以方便地实现定时任务逻辑。 2. 功能和特性:Quartz 框架提供了丰富的功能和特性,如支持复杂的调度策略、支持集群环境下的任务调度、支持任务持久化、支持任务触发器的灵活配置等。而 QuartzJobBean 是 Quartz 框架提供的一个基类,用于简化定时任务的编写和管理。 3. 依赖关系:使用 Quartz 框架需要引入相应的依赖库,并进行配置。而 QuartzJobBean 是 Quartz 框架中的一个类,通过继承它可以直接使用框架提供的定时任务功能。 4. 执行逻辑封装:QuartzJobBean 类提供了一些钩子方法,如 executeInternal(...) 方法,用于封装具体的定时任务逻辑。通过继承 QuartzJobBean 类,可以重写这些方法,并在其中实现自定义的定时任务逻辑。 总的来说,Quartz 框架是一个用于调度和执行定时任务的开源框架,而 QuartzJobBean 是该框架中的一个类,用于编写定时任务的具体执行逻辑。QuartzJobBean 提供了一种简化定时任务编写和管理的方式,但是使用 Quartz 框架并不一定要使用 QuartzJobBean,可以选择其他方式来编写定时任务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值