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 分鐘一次”。這種情況下的解決方案是簡單地創建兩個觸發器,并注冊它們以運行同一個作業。
添加回答
舉報