【问题标题】:How to run a task daily from Java?如何每天从 Java 运行任务?
【发布时间】:2009-09-30 15:22:28
【问题描述】:

如何使用java.util.Timer 每天在指定时间(比如上午 11:00)运行任务?我使用的是 JDK 1.4.2,我知道它很旧,但这是项目需要的。

【问题讨论】:

    标签: java timer jdk1.4


    【解决方案1】:

    Quartz 是在 Java 环境中调度进程的最著名的解决方案,但您有很多选择。检查此列表:

    Quartz 是一个开源作业调度系统,可以与几乎任何 J2EE 或 J2SE 应用程序集成或一起使用。 Quartz 可用于创建简单或复杂的时间表。

    Jcrontab 旨在与任何项目进行扩展和集成。读取并存储要在文件、数据库或 EJB 中执行的任务,并提供 Web UI 和基本的 Swing GUI。

    Essiembre J2EE Scheduler 是一种用于 J2EE 应用程序的简单任务调度机制。这个库可以被认为是标准 Java API 中的 Timer 和 TimerTask 类的包装器。要执行的任务及其频率的配置是基于 XML 的。

    cron4j 是 Java 2 平台的调度程序,与 UNIX cron 守护进程非常相似。

    Oddjob 的目标是为将企业的关键业务流程联系在一起的所有批处理文件和 cron 作业提供一些顺序和可见性。

    Fulcrum Scheduler 提供调度服务。它基于 Turbine 提供的 TurbineScheduler,但所有旧的东西都已被删除。目前只完成了非持久调度程序。它从组件配置 xml 文件加载计划作业。

    Gos4j -Java 的面向目标的调度 - 是一种基于目标组织处理优先级的方法。

    Job Scheduler 是一个作为恶魔运行的批处理程序,可以使用图形用户界面进行控制。 Job Scheduler 为计划的程序、脚本以及任务处理的时间和频率使用 XML 配置。可以使用 API 来控制事件并将日志记录到您的作业中。

    JDRing 是一个轻量级的 Java 调度库,它简单而小巧,但仍支持在指定的时间间隔、作为一次性事件或具有完全类似 cron 控制的复杂调度上的响铃。

    jBatchEngine 是一个用 Java 编写的批处理作业假脱机程序。与 Cron 等时间驱动的调度程序相比,jBatchEngine 是事件驱动的。

    MyBatchFramework 是一个开源轻量级框架,旨在创建易于使用 Java 语言的健壮且易于管理的批处理程序。

    Super with SuperScheduler and SuperWatchdog 是一个 Java 作业调度程序,为所有应用程序提供丰富的 GUI。它是平台中立的。成为 Linux 和 Solaris 的作业调度程序特别好。它提供了 Microsoft Windows 调度程序的一组超级功能。它提供事件触发的调度。它可以在分布式环境中调度任务。一个任务将在网络中的所有机器中执行一次且仅一次。所有任务都是假期可调的。即使每项工作都是 STANDBY 工作,历史也将成为重要任务的良好跟踪。它支持国际化。

    来源:Open Source Job Schedulers in Java

    【讨论】:

      【解决方案2】:

      查看 TimerTask 和 Timer - 两者都在那个版本的 JDK 中。

      Timer :
      public void schedule(TimerTask task, Date firstTime, long period)
      public void scheduleAtFixedRate(TimerTask task, Date firstTime, long period)
      

      将其设置为运行您想要的第一个日期,然后将一天中的毫秒数作为您的延迟。

      【讨论】:

        【解决方案3】:

        您可以使用cron4j 之类的库吗?这将使您的工作更轻松!

        【讨论】:

        • 这似乎有可能取决于是否允许使用此库
        • 我支持这个建议——cron4j 令人愉悦,而且工作起来像魅力一样,比石英简单得多(它也有效,它只是相当大,而且通常比你真正需要的要多;并且有一些更简单的用例的扭结)
        【解决方案4】:
        • Java 计时器可以按时间间隔、预定时间等运行任意作业。
        • Quartz图书馆
        • 如果您真的想简单一点,请将其包装在 shell 脚本中并放入 cron 中。

        【讨论】:

          【解决方案5】:

          你必须使用Quartz

          不过,我从来不知道谁首先推出了 Quartz。

          如果您有应用服务器或类似的工件,您可以在那里配置 Quartz 作业并让它在给定时间运行您的任务。

          【讨论】:

          • Quartz 有很多花哨的功能,所以如果你的要求很详细,它可能是一个不错的选择。但如果你有一个简单的“每天 5:00 关闭”,我会使用 Timer。
          【解决方案6】:

          也许,最近的那篇文章对你有帮助:

          Will this pause my Java thread for a minute?

          我对这个问题的回答是使用基于 java.util.Time 和 java.util.TimerTask 类的 java 内置实现: Will this pause my Java thread for a minute?

          或者,您可以将 crontab 服务用于 *nix 平台(也适用于 Windows 平台)。这是定期运行独立作业的最简单和轻量级的样式。

          []的,

          过去

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2015-08-14
            • 2021-03-15
            • 1970-01-01
            • 2012-01-26
            • 1970-01-01
            • 2011-10-02
            • 1970-01-01
            相关资源
            最近更新 更多