我有一个Java后端。我想创建在特定日期只运行一次的作业。 我在.Net中看过一些例子我不知道在我的Java后端是否可能?
这是.Net工作https://www.quartz-scheduler.net/
例如......
createJob(Date date) {
...
start(date) {
...
myMethod();
使用
createJob(myDate); //30-05-2017 15:25
答案 0 :(得分:2)
我相信你想要的是ScheduledExecutorService
接受延迟参数的schedule
方法。该延迟可以用不同的TimeUnit
量来指定,例如纳秒,秒,小时等。
我们的想法是以某些时间单位(例如秒)计算所需执行日期与当前时间之间的差异。
这是一个应该给你一个线索的片段(Java 8)。
public class App {
public static void main(String[] args) {
final Runnable jobToExecute = () -> System.out.println("Doing something on " + new Date());
ScheduledExecutorService executorService = new ScheduledThreadPoolExecutor(1);
ScheduledFuture future = executorService.schedule(jobToExecute, diffInSeconds(LocalDateTime.of(2017, 5, 30, 23, 54, 00)), TimeUnit.SECONDS);
}
private static long diffInSeconds(LocalDateTime dateTime) {
return dateTime.toEpochSecond(ZoneOffset.UTC) - LocalDateTime.now().toEpochSecond(ZoneOffset.UTC);
}
}
您可以通过ScheduledExecutorService::schedule
方法返回的ScheduledFuture
对象跟踪作业的完成状态。