Quartz的使用(二)

SimpleTrigger
可以满足的调度需求是:在具体的时间点执行一次,或者在具体的时间点执行,并且以指定的间隔重复执行若干次。

指定从某一个时间开始,以一定的时间间隔(单位是毫秒、秒、分、时)执行的任务。

它的属性:
1、repeatInterval 重复间隔
2、repeatCount 重复次数。实际执行次数是 repeatCount+1。因为在startTime的时候一定会执行一次。

重复次数,可以是0、正整数,以及常量SimpleTrigger.REPEAT_INDEFINITELY。重复的间隔,必须是0,或者long型的正数,表示毫秒。注意,如果重复间隔为0,trigger将会以重复次数并发执行(或者以scheduler可以处理的近似并发数)。

1、当前时间15秒后运行,每10秒运行一次,共运行5次
        //当前时间15秒后
        Date startTime=DateBuilder.nextGivenSecondDate(null,15);

        SimpleTrigger trigger1=newTrigger()
                 .withIdentity("trigger1","group1")
                 .startAt(startTime)
                 .withSchedule(simpleSchedule().withIntervalInSeconds(10).withRepeatCount(5))
                 .build();

2、从指定时间开始,每10秒钟执行一次,一直执行

SimpleTrigger trigger1=newTrigger()
                .withIdentity("trigger1","group1")
                .startAt(startTime)
             //加入schedule立即执行
            //  .startNow()
                .withSchedule(simpleSchedule()
                        .withIntervalInSeconds(10)
                         .repeatForever())
                .build();

CalendarIntervalTrigger
类似于SimpleTrigger,指定从某一个时间开始,以一定的时间间隔执行的任务。支持的间隔单位有秒,分钟,小时,天,月,年,星期。没法指定重复的次数。

它的属性:
1、interval 执行间隔
2、intervalUnit 执行间隔的单位(秒,分钟,小时,天,月,年,星期)

//隔一年执行
 CalendarIntervalTrigger ctrigger=newTrigger()
                .withIdentity("trigger1","group1")
                .startNow()
                .withSchedule(CalendarIntervalScheduleBuilder
                .calendarIntervalSchedule()
                .withIntervalInYears(1))
                .build();

DailyTimeIntervalTrigger
指定每天的某个时间段内,以一定的时间间隔执行任务。可以指定秒、分、时。可以指定重复次数。

DailyTimeIntervalTrigger dtrigger=newTrigger()
                .withIdentity("trigger1","group1")
                .startNow()
                .withSchedule(DailyTimeIntervalScheduleBuilder
                          .dailyTimeIntervalSchedule()
                           .withIntervalInHours(1)
                           .withRepeatCount(10))
                .build();

DateBuilder.nextGivenMinuteDate(Data,int),按间隔输出时间,结果会比较特殊:

//格式化
  SimpleDateFormat sdf=new SimpleDateFormat("HH:mm:ss");
        //Date date=new Date();
        //输入的时间
        String tm="11:17:41";
        try{
            Date startTime=DateBuilder.nextGivenMinuteDate(sdf.parse(tm),30);
            System.out.println("时间:"+sdf.format(startTime));
        }catch (Exception e){
            e.printStackTrace();
        }
//结果:
时间:11:30:00

这样结果的规律是:将输入的结果初始值换算为00,将时间按照指定的间隔等分,然后加上指定的时间间隔(整数倍);对结果值进行判断,返回离初始时间最近的,但是比初始时间大的结果时间(在时间间隔范围内)
这里写图片描述

CronTrigger
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

CronTrigger cronTrigger=newTrigger()
                .withIdentity("trigger1","group1")
                .withSchedule(CronScheduleBuilder.cronSchedule("0 33 20 * * ?"))
                .build();

参考文章:
http://blog.csdn.net/guolong1983811/article/details/51501346
https://www.ibm.com/developerworks/cn/opensource/os-cn-quartz/
http://www.cnblogs.com/yqw1994/p/6599562.html
http://www.blogjava.net/xmatthew/archive/2009/02/15/253864.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值