我希望函数以数据库/模式的名称作为输入,并每隔5分钟检查一下数据库是否处于活动状态的天气,然后将其记录在另一个表中。 有点像监视数据库
我有一个功能说重复
function repeat(String database_name) {
//check database_name can be connected or not
}
当我用@scheduled注释时,如何在函数重复值(如果不是参数)中传递值
答案 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
也可以是参数。