在春季启动时执行方法

2022-08-31 06:27:40

是否有任何 Spring 3 功能可以在应用程序首次启动时执行某些方法?我知道我可以做一个用注释设置方法的技巧,它在启动后立即执行,但随后它会定期执行。@Scheduled


答案 1

如果“应用程序启动”是指“应用程序上下文启动”,那么是的,有很多方法可以做到这一点,最简单的方法(对于单例bean,无论如何)是用 来注释你的方法。查看链接以查看其他选项,但总而言之,它们是:@PostConstruct

  • 注释为 的方法@PostConstruct
  • afterPropertiesSet()由回调接口定义InitializingBean
  • 自定义配置的 init() 方法

从技术上讲,这些是bean生命周期的钩子,而不是上下文生命周期,但在99%的情况下,两者是等效的。

如果您需要专门挂接到上下文启动/关闭,那么您可以改为实现生命周期接口,但这可能是不必要的。


答案 2

这可以通过 .我把它弄到工作听春天的:ApplicationListenerContextRefreshedEvent

import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.stereotype.Component;

@Component
public class StartupHousekeeper implements ApplicationListener<ContextRefreshedEvent> {

  @Override
  public void onApplicationEvent(final ContextRefreshedEvent event) {
    // do whatever you need here 
  }
}

应用程序侦听器在 Spring 中同步运行。如果要确保代码只执行一次,只需在组件中保留一些状态即可。

更新

从Spring 4.2 +开始,您还可以使用注释来观察(感谢@bphilipnyc指出这一点):@EventListenerContextRefreshedEvent

import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.stereotype.Component;

@Component
public class StartupHousekeeper {

  @EventListener(ContextRefreshedEvent.class)
  public void contextRefreshedEvent() {
    // do whatever you need here 
  }
}

推荐