gpt4 book ai didi

java - 无论操作系统如何,用 Java 执行计划任务的最佳解决方案是什么?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:48:55 25 4
gpt4 key购买 nike

我想在我的 Java 桌面应用程序上生成警报:

  • 设置了特定日期/时间的闹钟,可以是 5 分钟或 5 个月内
  • 我需要能够在触发警报时创建 SWT 应用程序
  • 我需要它能够在任何操作系统上工作。软件用户可能使用 Windows(其中 90%),其余使用 Mac OS(包括我)
  • 软件许可必须允许我在商业程序中使用它,而不需要开源(因此,没有 GPL)
  • 我不能要求用户安装 Cygwin,因此实现需要原生于 Windows 和 Unix

我正在使用 Java、Eclipse、SWT 进行开发,我的应用程序是使用 Java Web Start 从我的服务器部署的。我正在使用 Mac OS X.6 进行开发。


我想我有几个选择:

  1. 在启动时运行我的应用程序,并自己处理所有事情;
  2. 使用系统服务。
  3. 在 Unix 上使用 cron 表,在 Windows 上使用计划任务

启动时运行

我不太喜欢这个解决方案,我希望有更优雅的东西。
引用:I would like to run my Java program on System Startup on Mac OS/Windows. How can I do this?

系统服务

如果我将它作为系统服务运行,我可以从中受益,因为操作系统将确保我的软件:

  • 一直在运行
  • 没有/不需要 GUI
  • 失败重启

我研究了一些我可以使用的资源:

  • run4j — CPL — 仅在 Windows 上运行,似乎是一个有效的候选者
  • jsvc — Apache 2.0 — 仅限 Unix,似乎是一个有效的候选者
  • Java Service Wrapper — 各种 — 我买不起付费许可证,免费的是 GPL。因此,我不想/不能使用这个

我在系统服务选项中的问题是:

  1. 还有其他选择吗?
  2. 我计划的实现是否正确:

    • 在应用程序启动时,检查服务是否存在
    • 如果没有安装:
      • 升级用户安装服务(Unix 为 root,Windows 为 UAC)
      • 如果主机操作系统是Windows,使用run4j注册服务
      • 如果主机操作系统是Unix,使用jsvc注册服务
    • 如果没有运行,启动它

因此,在第一次运行时,应用程序将安装服务并启动它。当应用程序关闭时,服务仍在运行并且不再需要该应用程序,除非它未注册。
但是,我想我仍然怀念“启动时运行”功能。

我说的对吗?我错过了什么吗?

cron/任务计划程序

在 Unix 上,我可以轻松地使用 cron 表,而无需应用程序将用户升级为 root。我不需要处理重启、系统日期更改等。看起来不错。

在 Windows 上,我可以使用 Task Scheduler , 即使在命令行中使用 AtSchTasks .这看起来不错,但我需要它兼容从 XP 到 7,我不能轻易测试它。


那你会怎么做呢?我错过了什么?您有什么建议可以帮助我选择最佳和最优雅的解决方案吗?

最佳答案

Bicou:很高兴您分享了您的解决方案!

请注意“schtasks.exe”有一些本地化问题,如果你想用它创建每日触发器,在英语 Windows 上你必须使用“daily”,在德语 Windows 上(例如)你必须改用“täglich”。

为了解决这个问题,我使用 /xml 选项实现了对 schtasks.exe 的调用,提供了一个我通过模板创建的临时 xml 文件。

创建此类模板的最简单方法是“手动”创建任务并使用任务管理 GUI 工具中的“导出”功能。

关于java - 无论操作系统如何,用 Java 执行计划任务的最佳解决方案是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11898647/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com