我会在每小时的预定时间执行一项任务,并使用@Scheduled执行以下操作。下面的代码确实在每小时后5分钟执行任务。但是,如果我在应用程序启动后更改属性为“0 10 * * * *”,它是否会读取该值并将任务计划更改为在小时后10分钟运行?
@Component
public class DataCleanupTask {
private static final Logger LOGGER = LoggerFactory.getLogger(DataCleanupTask.class);
private static final SimpleDateFormat dateFormat = new SimpleDateFormat("YYYY-MM-DD HH:mm:ss a");
@Scheduled(cron = "${data.cleanup.task.schedule.cron}")
public void cleanupData() {
LOGGER.debug("Starting data cleanup at " + dateFormat.format(new Date()));
}
}
# application.properties
# Schedules a task to run 5 minutes after the hour, every hour
data.cleanup.task.schedule.cron=0 5 * * * *
答案 0 :(得分:4)
在Spring应用程序中,读取属性 - 并在系统启动时处理对它们的所有引用(由BeanFactoryPostProcessor
);在应用程序启动后更改属性文件在重新启动应用程序之前不会产生任何影响。
为了在运行时重新配置您的系统,您需要公开从外部修改它们的方法,例如:使用JMX。
答案 1 :(得分:1)
正如marthursson所说:Spring在启动时适用,但之后不会刷新属性值。
如果您正在寻找此类功能,可以尝试apache commons-configuration。
这是一篇博客文章,展示了如何使用spring来查看属性文件中的更改:Reloadable properties file with Spring using Apache Commons Configuration。