猿问

如何在启动Spring应用程序之前初始化数据结构?

我有一个用于初始化它的数据结构,我需要向数据库发出请求,然后调用将为数据结构准备数据的对象,然后才对其进行初始化。在启动 spring-mvc 应用程序之前我该怎么做?


我正在尝试使用 @PostConstruct 和 @EventListener(ApplicationReadyEvent.class) 等注释,但它们是随 spring 应用程序启动的,目前数据结构尚未初始化。


有代码示例:


public class DataStructure{

    Collection data = new Collection();//some kind of collection




    @PostConstruct

    public void initDS(){

        DataFromDataBase data = ...;

        SomeObjectThatPrepareData obj = new SomeObjectThatPrepareData(data);


        Collection preparedData = obj.prepareData();


        preparedData.forEach(DataStructure::addData);



    }


    private void addData(Data data){ ... }


    ...

}


public class ClassThatUseDataStucture{

     private static DataStructure readyData;

     static{

         readyData = new DataStructure();

         readyData.initDS();

     }


    ...


}


收到一只叮咚
浏览 84回答 1
1回答

当年话下

如果您想在 Spring boot 应用程序启动时设置/初始化某些内容,您应该使用ApplicationRunner或CommandLineRunner。Spring boot 提供了一个ApplicationRunner带有回调 run() 方法的接口,可以在实例化 Spring 应用程序上下文后在应用程序启动时调用该方法。例如@Componentpublic class AppStartupRunner implements ApplicationRunner {    @Override    public void run(ApplicationArguments args) throws Exception {        // Setup or initialization activities    }}或者您可以按照 Aniket 在评论中的建议创建 Bean:@Bean ApplicationRunner thisWillRunAutomatically() {    return args -> { ... };}
随时随地看视频慕课网APP

相关分类

Java
我要回答