有什么办法可以在Spring Boot中安排带有参数的功能

时间:2020-03-23 12:55:31

标签: java spring-boot scheduled-tasks spring-scheduled

我希望函数以数据库/模式的名称作为输入,并每隔5分钟检查一下数据库是否处于活动状态的天气,然后将其记录在另一个表中。 有点像监视数据库

我有一个功能说重复

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

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

2 个答案:

答案 0 :(得分:0)

一个解决方案是创建一个代表参数的对象,并在5分钟后执行该操作,获取该对象并将内部状态用作参数的表示。您必须确保每5分钟执行一次MyEventService包含对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
    }
}

答案 1 :(得分:-1)

实际上@Scheduled接受参数。使用参数fixedRate指定间隔(以毫秒为单位):

@Scheduled(fixedRate = 300000‬)
public void youFunction() {
}

每5分钟执行一次。

如果您需要在运行时通过method参数指定间隔,请在此处查看我的答案: Is it possible to call a spring scheduled method manually

您可以使用TaskScheduler并通过

手动安排任务
taskScheduler.schedule(task1, new PeriodicTrigger(5, TimeUnit.MINUTES));

5也可以是参数。