问题描述
我想定期执行一个函数。首先我需要将一个对象列表保存到数据库中。保存后,我需要不断监视对象字段之一以查看其值是否发生变化。如果该值在 db 中发生变化,我需要发送一个成功响应为此我需要将实体列表的 id 传递给监控函数。所有这些都发生在一个 Api 中。
解决方法
@Scheduled 注释对您有帮助吗?
@Scheduled(fixedDelay = 1000)
public void monitorOneOfTheObjectFields() {
// monitoring logic here.
}
此方法必须从某处检索值。您可以从内存中的字段存储和检索它们,但这可能会导致水平缩放问题。将这些 ID 存储在数据库(例如 redis)中将是另一种选择。
,添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
<version>${spring-boot-starter-quartz.version}</version>
</dependency>
编码工作:
@Component
@EnableScheduling
@EnableAsync
public class Job{
@Async
@Scheduled(initialDelay = 15000,fixedDelay = 300000)
public void method() {
// do something
}
}
@Component : 表示这是一个配置,@Configuration 也可以使用
@EnableScheduling
@Scheduled(initialDelay = 15000,fixedDelay = 300000)
initialDelay : 服务器启动后 15000 毫秒开始运行此方法
fixedDelay : 然后每 300000 毫秒运行一次这个方法
@EnableAsync
@异步
如果您需要异步执行,请添加它们