-
呼啦一阵风
并想执行一次,我的一些旧代码可以触发一次性的预定工作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);
-
精慕HU
获取您想要的时区中看到的当前时刻。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 任务。
-
慕村9548890
谢谢你们的帮助,我在这里找到了答案: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 分钟一次”。这种情况下的解决方案是简单地创建两个触发器,并注册它们以运行同一个作业。