【问题标题】:How make a job to determine date only once from Java如何让工作从 Java 中只确定一次日期
【发布时间】:2017-10-31 10:41:17
【问题描述】:

我有一个 Java 后端。我想创建在某个日期只运行一次的作业。 我在 .Net 中看到过示例,但不知道在我的 Java 后端是否可行?

这是 .Net 职位https://www.quartz-scheduler.net/

例如...

createJob(Date date) {
...
start(date) {
...
myMethod();

使用

createJob(myDate); //30-05-2017 15:25

【问题讨论】:

    标签: java .net cron jobs


    【解决方案1】:

    我相信你想要的是ScheduledExecutorService schedule 接受 delay 参数的方法。该延迟可以指定为不同的TimeUnit 数量,例如纳秒、秒、小时等。

    这个想法是以某些时间单位(例如秒)计算所需执行日期和当前时间之间的差异。

    这是一个可以为您提供线索的 sn-p (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 对象跟踪作业的完成状态。

    【讨论】:

    • 是的,它是正确的。但我正在寻找的是让实例在我的后端服务器上保持活动状态。而且您还可以更改日期或取消。
    • @marlonpya ScheduledExecutorService::schedule 返回一个ScheduledFuture。您可以使用该对象来检查您的作业状态。
    • 如果我今天在 ScheduledExecutorService 上做。那么也许明天我想取消这个预定或改变如何获得特定对象?
    • @marlonpya 您是否费心查看我在之前的评论中为您链接的ScheduledFuture 的类文档?注意isDoneisCancelledcancel 等方法。并阅读Oracle Tutorial on executors。并搜索 Stack Overflow,因为这些主题已经讨论过很多次了。
    • 我认为您可以创建一些作为 ScheduledFuture 对象的上下文的单例类。公开一种方法(例如计划),它将取消当前的 ScheduledFuture 并根据提供的日期创建一个新方法。但是,您还需要考虑容错性——如果您的 JVM 出现故障会发生什么?您可以将预定日期和状态(已取消、已完成、已预定)存储在数据库中,当应用程序启动时,它将获取这些值并创建新的 ScheduledFuture,例如(或什么都不做)。
    猜你喜欢
    • 2018-02-17
    • 1970-01-01
    • 2021-03-01
    • 2010-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-09
    相关资源
    最近更新 更多