如何通过传递参数在 sprinboot 中定期执行任务

问题描述

我想定期执行一个函数。首先我需要将一个对象列表保存到数据库中。保存后,我需要不断监视对象字段之一以查看其值是否发生变化。如果该值在 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
@异步
如果您需要异步执行,请添加它们