有时候,我们在做项目的时候,总有一些需求是要在项目启动的时候完成一些初始化的工作,完成这些项目的时机:
有时候是容器启动前:如果没有完成这些准备工作可能会导致我们提供的服务出错。
有时候是容器启动后:这些初始化工作可能比较耗时,会影响我们提供服务。
总结下来,我们可以采用如下两种方式来实现:
① 项目启动前完成数据加载
package chen.huai.jie.springboot.init.config; import lombok.extern.slf4j.Slf4j; import org.springframework.context.ApplicationListener; import org.springframework.context.event.ContextRefreshedEvent; import org.springframework.stereotype.Component; import java.util.concurrent.atomic.AtomicBoolean; @Slf4j @Component public class DefaultApplicationListener implements ApplicationListener{ private volatile AtomicBoolean initialized = new AtomicBoolean(false); @Override public void onApplicationEvent(ContextRefreshedEvent event) { if (initialized.compareAndSet(false, true)) { log.info("容器启动前完成初始化工作"); } } }
②:项目启动后完成初始化工作
package chen.huai.jie.springboot.init.config;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
@Slf4j
@Component
public class StartupRunner implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
log.info("容器启动后完成初始化工作");
}
}
我们看下运行结果:
完美实现了目标.



