Spring Boot:从数据库中获取@Scheduled cron 值

2022-09-01 09:46:06

我正在使用数据库中存在的使用值,并且无法计划使用。Spring Bootcron task

目前,我正在从属性文件中读取值,如下所示:

@Scheduled(cron= "${time.export.cron}")
public void performJob() throws Exception {
   // do something
}

这工作得很好,但我想从数据库表中获取它们,而不是从属性文件中获取值。可能吗,如何?


答案 1

您可以添加一个bean,以从SpringBootApplication主类或任何配置类中的数据库中获取cron值。示例代码如下:

@Autowired
private CronRepository cronRepo;

@Bean
public int getCronValue()
{
    return cronRepo.findOne("cron").getCronValue();
}

您应该创建一个表并在数据库中提供合适的值。之后,您可以在 .示例代码如下:@Scheduled

@Scheduled(cron="#{@getCronValue}")

希望它适用于您的问题。


答案 2

要实现目标,必须在运行时配置调度程序。这意味着您需要使用更多低级调度程序 API。确切地说,当您已经准备好与数据库连接时,您可以配置调度程序。我认为你需要摆脱使用@Scheduled注释,并手动管理你的调度程序。

我认为这些主题可以帮助描述我的意思:

  1. 如何在运行时更改Spring的@Scheduled修复Delay

  2. 以编程方式使用 Spring 调度作业(动态设置固定速率)

但是,您始终可以使用野生方法,其中您将拦截bean创建并将注释上的原始注释替换为自定义元数据,但是为了实现它,您必须了解许多框架细节以及@Scheduled natation处理器的工作原理。


推荐