3 回答
TA贡献1802条经验 获得超6个赞
并想执行一次,
我的一些旧代码可以触发一次性的预定工作
Calendar cal = Calendar.getInstance();
SimpleDateFormat df = new SimpleDateFormat("yyyy/MM/dd");
cal.setTime(df.parse(job.getRunatDate()));
cal.set(Calendar.HOUR_OF_DAY, Integer.parseInt(job.getRunatHour()));
cal.set(Calendar.MINUTE, Integer.parseInt(job.getRunatMin()));
log.debug ("One-off job at " + cal.getTime());
Trigger trigger = (SimpleTrigger) TriggerBuilder.newTrigger()
.withIdentity("trigger" + job.getLineNumber(), "group1")
.startAt(cal.getTime())
.build();
sched = new StdSchedulerFactory().getScheduler();
sched.start();
sched.scheduleJob(job, trigger);
TA贡献1845条经验 获得超8个赞
获取您想要的时区中看到的当前时刻。
ZoneId z = ZoneId.of( "America/Montreal" ) ;
ZonedDateTime zdtNow = ZonedDateTime.now( z ) ;
定义你的目标时间。
LocalTime targetTime = LocalTime.of( 7 , 15 ) ;
与当前时间进行比较。
LocalTime timeNow = zdtNow.toLocalTime() ;
ZonedDateTime targetZdt = zdtNow.with( targetTime ) ;
if( ! timeNow.isbefore( targetTime ) )
{
targetZdt = targetZdt.plusDays( 1 ) ; // Auto-adjusts if this time of day is not valid on that date in that zone.
}
计算到那时为止经过的时间。
Duration d = Duration.between( zdtNow , targetZdt ) ;
ScheduledExcutorService在等待 Duration 中的时间量后,使用 Executors 框架以单线程安排您的 Runnable 任务。
TA贡献1884条经验 获得超4个赞
谢谢你们的帮助,我在这里找到了答案:
CronTrigger 示例 1 - 用于创建每 5 分钟触发一次的触发器的表达式
“0 0/5 * * * ?”
CronTrigger 示例 2 - 创建触发器的表达式,该触发器每 5 分钟触发一次,在该分钟后的 10 秒(即上午 10:00:10、上午 10:05:10 等)触发。
“10 0/5 * * * ?”
CronTrigger 示例 3 - 用于创建触发器的表达式,该触发器在每周三和周五的 10:30、11:30、12:30 和 13:30 触发。
“0 30 10-13 ?* 周三、周五”
CronTrigger 示例 4 - 创建触发器的表达式,该触发器在每月 5 号和 20 号的上午 8 点到 10 点之间每半小时触发一次。请注意,触发器不会在上午 10:00 触发,仅在 8:00、8:30、9:00 和 9:30 触发
“0 0/30 8-9 5,20 * ?”
请注意,某些调度要求过于复杂,无法用单个触发器来表达——例如“上午 9:00 到 10:00 之间每 5 分钟一次,下午 1:00 到 10:00 之间每 20 分钟一次”。这种情况下的解决方案是简单地创建两个触发器,并注册它们以运行同一个作业。
添加回答
举报