Spring Component中如何实现仅在启动时调用一次方法?
Spring组件中实现方法仅在应用启动时执行一次的最优方案
别用超长间隔的定时任务取巧了,Spring本身提供了更直接的方案来实现“应用启动时仅执行一次”的需求,下面给你几种常用的最优解法:
方法一:使用@PostConstruct注解
如果你的方法只需要在当前Bean初始化完成后执行(不需要等整个应用完全启动),直接给方法加@PostConstruct注解即可,Spring会在Bean的依赖注入完成后自动调用一次:
@Component public class Test { @PostConstruct public void foo() { // 这里写你要执行的逻辑 } }
方法二:实现ApplicationRunner接口
如果你的方法需要等整个Spring应用完全启动(所有Bean都初始化完成、上下文刷新完毕)后再执行,推荐实现ApplicationRunner接口,重写run方法,Spring会在应用启动完成后自动调用这个方法:
@Component public class Test implements ApplicationRunner { @Override public void run(ApplicationArguments args) throws Exception { // 这里写你要执行的逻辑 } }
方法三:实现CommandLineRunner接口
和ApplicationRunner类似,区别是run方法的参数是命令行传入的原始字符串数组,适合需要处理命令行参数的场景:
@Component public class Test implements CommandLineRunner { @Override public void run(String... args) throws Exception { // 这里写你要执行的逻辑 } }
三种方案的区别
@PostConstruct:Bean初始化完成(依赖注入完成)就执行,此时应用可能还没完全启动,不适合依赖其他全局Bean就绪的场景ApplicationRunner/CommandLineRunner:应用完全启动后执行,所有Bean都已初始化完成,适合需要应用就绪后再执行的逻辑
内容的提问来源于stack exchange,提问作者chris01
相关产品推荐
相关产品推荐

