【问题标题】:Updating Spring @Scheduled Cron From Properties File从属性文件更新 Spring @Scheduled Cron
【发布时间】:2026-01-30 02:35:01
【问题描述】:

我有一个使用 Spring 的 @Scheduled 注释和从属性文件加载的 cron 表达式调度的方法,如 this 文章中所述。包含此计划方法的应用程序作为 .war 文件部署在 Tomcat 应用程序服务器上。

这可以正常工作,并且计划的方法按照属性文件中给出的 cron 表达式按预期运行。

我的问题是,如果我想在方法执行时进行更改,并且我修改了属性文件中的 cron 表达式,是否需要重新部署应用程序才能使更改生效?

【问题讨论】:

  • 您无需重新部署应用程序。您可以只更新属性文件中的 cron 表达式并重新启动应用程序。在下一次运行中,新的 cron 表达式将用于调度。
  • “重新启动”应用程序是什么意思?它是一个不包含 main 方法的 war 文件,使用 @Scheduled 注释的方法仅通过 Spring 调度程序运行。你的意思是重新启动Tomcat应用服务器?
  • 对不起,我应该告诉重新启动服务器(Tomcat Web 服务器)。最佳实践是始终将属性文件保留在您的 war 文件之外,以便更轻松地更新属性。如果您有义务将属性文件保留在 war 文件中,则以分解格式部署 war 文件。这样您仍然可以直接更新属性,而无需生成新的战争。

标签: java spring tomcat cron war


【解决方案1】:

由于 war 文件以分解格式部署,因此可以直接更新属性文件,而无需生成新的 war 和/或重新部署。要使更改的属性在 @Scheduled 注释中生效,可以:

  • 可以重新启动 Tomcat 应用程序服务器(感谢@Mithun,由于某种原因没有想到这一点)。

  • 可以使用 Tomcat 的管理器应用程序重新加载一场战争(请参阅here)。

【讨论】: