首页 > 解决方案 > 有没有办法在spring boot中用参数来调度一个函数

问题描述

我想要一个函数将数据库/模式的名称作为输入,并每 5 分钟检查一次数据库是否处于活动状态,然后将其记录在不同的表中。有点像监控数据库

我有一个功能说重复

function repeat(String database_name) {
     //check database_name can be connected or not
}

当我将使用@scheduled 对其进行注释时,如何在函数重复(如果不是参数)中传递值

标签: javaspring-bootscheduled-tasksspring-scheduled

解决方案


对此的一种解决方案是创建一个表示参数的对象,并在 5 分钟后执行时,获取该对象并使用内部状态作为参数的表示。您必须确保 MyEventService 在每 5 分钟执行一次之前包含对 Event 的引用。如果没有对原始帖子的更多输入,就不可能知道如何/何时执行此操作。

如果参数永远不会改变,那么我建议使服务不可变,并删除事件类,并使用 @Value 通过属性提供值。

class Event {

    private final String myString;

    // constructor, getter

}
@Service
public class MyEventService {

    private Event event;

    // constructor, setter, getter

}
class MyScheduledTask {

    @Autowired
    private MyEventService eventService;

    @Scheduled(fixedDelay = 300_000)
    public void execute() {
        Event event = eventService.getEvent();

        if (event == null) {
            throw new IllegalStateException("No event to process.");
        }
        // process event
    }
}

推荐阅读