【问题标题】:Automatically run Java methods every hour每小时自动运行 Java 方法
【发布时间】:2014-07-14 06:50:50
【问题描述】:

我在 Java 中有这些方法,例如应该每小时运行一次:

public static void main(String[] args) throws Exception{    
    readLog(); // method to read log file
    sortByDate(); //sort punch in data by day
    checkPeopleIn(); // check people who are in, add and remove to list accordingly 
    output_details(); //output final details
    System.out.print("_____________________________________");      
}

如何将此功能添加到该程序中?在处理中,我曾经使用millis() 方法来创建一个计时器,但我找不到等效的……它可用吗?

提前致谢

【问题讨论】:

  • 运行一个线程,检查小时。每次是 x.00,检查这个小时是否已经运行,如果没有,运行。
  • @Stultuske 认真的吗?积极的等待......
  • 你研究过 Quartz API 吗?
  • 只需使用java的时间函数,只需设置每小时的刻度。

标签: java methods time


【解决方案1】:

如果这是一个长时间运行的应用程序(如守护程序或服务)的一部分,那么使用计时器的解决方案是可以的。

如果您想每小时运行一次您的 java 应用程序,您需要一个特定于操作系统的解决方案(如 cron)。

【讨论】:

  • 我明白你的意思,有道理。这是根据手持扫描仪生成的日志文件检查建筑物中的人员的应用程序。
  • 那么它是 24x7 全天候运行还是您只想每小时启动一次?
  • 手持扫描仪每 1 小时轮询一次数据到一个日志文件,所以在它轮询后,我需要读取这个日志文件,并输出一个更新的文件。
  • 由于 cron('OS 特定解决方案')建议,我赞成这个。不得不让 Java 运行时等待一天中的大部分时间才能够在一定的时间间隔内执行某些事情,这只是在操作系统已经具备执行此操作的工具时浪费的努力。
【解决方案2】:

看看Java Executor framework

ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
service.scheduleAtFixedRate(new Runnable() {
    @Override
    public void run() {
        readLog(); // method to read log file
        sortByDate(); //sort punch in data by day
        checkPeopleIn(); // check people who are in, add and remove to list accordingly
        output_details(); //output final details
        System.out.print("_____________________________________");
    }
}, 0, 1, TimeUnit.HOURS);
service.shutdown();

来自thread:“如果您可以使用 ScheduledThreadExecutor 而不是 Timer,请这样做。”

【讨论】:

  • 如果您想优雅地停止您的进程,请务必关闭执行程序或使其成为守护线程。
  • 使用TimeUnit.HOURS 可能比计算一小时的秒数更有意义。
  • 我实现了这段代码,并用main方法替换了它。但我得到了错误,只是....不知道我是否正确实施它。感谢您的帮助
  • 基于良好的捕获@lyomi 和 Keppil 修改示例中的代码
  • 在做更多阅读和研究之后,如果您仍然卡住,请在此处以MVCE 格式发布您修改后的可执行代码。
【解决方案3】:

查看quartz-scheduler。它是一个功能丰富的开源作业调度库,几乎可以集成到任何 Java 应用程序中——从最小的独立应用程序到最大的电子商务系统

【讨论】:

  • 看起来很棒!感谢您的意见!
猜你喜欢
  • 2014-08-26
  • 1970-01-01
  • 2012-03-04
  • 2011-01-26
  • 1970-01-01
  • 2015-11-20
  • 2012-10-03
  • 1970-01-01
相关资源
最近更新 更多