如何在Spring Boot中设置一个方法以在特定日期执行

时间:2018-04-07 18:39:29

标签: java spring spring-boot

我的数据库中有一个“广告”实体,其中包含activeUntil字段。

现在,我想在我的后端创建一个方法,它将在Date activeUntil属性中指定为值的日期执行其逻辑。基本上我想发送过期广告的用户。可悲的是,我不知道该怎么做。 Spring Boot是否提供类似的功能?提前谢谢!

2 个答案:

答案 0 :(得分:3)

使用spring boot内置的计划任务功能。您可以使用CRON格式指定希望特定函数运行的日期和时间。

以下示例计划在每小时过去15分钟后运行,但仅限于工作日的9到5个“营业时间”。

scheduler.schedule(task, new CronTrigger("0 15 9-17 * * MON-FRI"));

在您的特定情况下,您的预定功能会从数据库中提取已过期的广告实体,并运行您要在每个已过期广告实体上执行的方法。

有关详细信息,请参阅文档:

https://docs.spring.io/spring/docs/current/spring-framework-reference/integration.html#scheduling

有关CRON语法的更多信息:

http://www.nncron.ru/help/EN/working/cron-format.htm

答案 1 :(得分:1)

Spring有@EnableScheduling和@Scheduled用于常规任务。见https://howtodoinjava.com/spring/spring-boot/enable-scheduling-scheduled-job-example/

请注意,@ Sherduled支持cron表达式。对于@Scheduled使用的cron表达式,请参阅https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/scheduling/support/CronSequenceGenerator.html

但是,您要根据某些动态日期询问规范任务。如果受到@EnableScheduling和@Scheduled的限制,这对我来说似乎是不可能的。相反,尝试使用spring-boot 2.0 Reactive Web。 Flux.interval(持续时间延迟,持续时间计时器)。

请注意,学习Reactive堆栈大约需要3到7天。如果您不想投入时间,只需创建自己的线程即可完成您想要的任何操作。