gpt4 book ai didi

java - 使用 Spring 在应用程序启动后执行方法

转载 作者:行者123 更新时间:2023-12-01 07:46:11 24 4
gpt4 key购买 nike

我的 Spring 服务组件中有这样的结构:

@Autowired
PointController controller;
@Autowired
ParametroService parametroService;

Timer timer = new Timer();
TimerTask timerTask = new TimerTask() {
@Override
public void run() {
List<IntRaptMec> allPointments = getNotValidated();

for(IntRaptMec pointment : allPointments) {
controller.validate(pointment.getIdTemp());
}
}
};

public void doValidationsTask() {

Parametro parametroTempo = parametroService.getParametro("1", "ATRC_MEC", "TEMPO_VERIFICACAO");
timer.scheduleAtFixedRate(
timerTask,
Integer.parseInt(parametroTempo.getValor()) * oneMinute,
Integer.parseInt(parametroTempo.getValor()) * oneMinute
);

}

我想要的是,在 Spring 应用程序完全初始化后,它将执行 TimerTask 内的 run() 方法。然后,在从 parametroService.getParametro() 获取的给定时间(以分钟为单位)之后,再次执行此任务。

我尝试从文档中访问此链接: https://docs.spring.io/spring/docs/current/spring-framework-reference/integration.html#scheduling-annotation-support

但似乎我无法动态设置执行特定任务的延迟时间

最佳答案

您可以使用 @EventListener 注释您的 run() 方法,或者创建一个新的此类注释方法来调用 run():

@EventListener
public void handleContextRefresh(ContextRefreshedEvent event) {
run();
}

如果您不使用支持 refresh() 操作的上下文,应该没问题。如果您使用此类上下文(并且您不希望 run() 在上下文刷新时执行),请确保将此状态存储在您的 bean 中。

More info on standard Spring events .

关于java - 使用 Spring 在应用程序启动后执行方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51707315/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com