我可以使用Quartz Scheduler库,设置如下?:我可以使用Quartz Scheduler在第30天每隔一个月发射一次,但如果月份没有第30天,最后一天发射?
- 从月,30日开始创建计划2014
- 执行每30天
- 每2个月因此
- 如果月份没有第30天,则应在月的最后一天发生操作。
因此,所产生的时间表将是:
- 2014年12月30日
- 月,2015年
- 2015年4月30日
- ...等
从我所了解到的:
- CronTrigger不允许这样做(它可以被设置为仅要在特定的月份,而不是间隔触发),
CalendarIntervalTrigger将跳过没有30天做个月(触发通过下面的代码创建)
try { SchedulerFactory schedulerFactory = new StdSchedulerFactory(); Scheduler scheduler = schedulerFactory.getScheduler(); scheduler.start(); JobDetail jobDetail = JobBuilder.newJob(HelloJob.class) .withIdentity("HelloJob_CalendarIntervaled", "calendarIntervaled") .build(); Calendar decemberThirty = Calendar.getInstance(); decemberThirty.set(Calendar.YEAR, 2014); decemberThirty.set(Calendar.MONTH, Calendar.DECEMBER); decemberThirty.set(Calendar.DAY_OF_MONTH, 30); CalendarIntervalTrigger calendarIntervalTrigger = newTrigger() .withIdentity("calendarIntervalTrigger", "calendarIntervaled") .withSchedule(CalendarIntervalScheduleBuilder.calendarIntervalSchedule() .withIntervalInMonths(2)) .startAt(decemberThirty.getTime()) .forJob(jobDetail) .build(); scheduler.scheduleJob(jobDetail, calendarIntervalTrigger); System.out.println(calendarIntervalTrigger.getNextFireTime()); } catch (SchedulerException e) { e.printStackTrace(); }
如果没有,是否有任何替代品(它应该在JBoss EAP 6.2.0工作)?
最迟的实施:每天开启工作,检查工作开始时是否有效。我不知道你的情况会有多么实际(安装成本等),但它可以让你使用日期API,将正确的日期逻辑移动到一个方法,记录和测试它,等等。 – ssube 2014-09-24 14:03:40