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

时间:2019-10-05 06:18:32

标签: java spring spring-boot

我有一些要初始化的数据结构,我需要向数据库发出请求,然后调用将为数据结构准备数据并仅对其进行初始化的对象。在启动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();
     }

    ...

}

1 个答案:

答案 0 :(得分:2)

如果您想在Spring启动应用程序启动时设置/初始化某些内容,则应该使用ApplicationRunnerCommandLineRunner

Spring boot为ApplicationRunner接口提供了一个回调run()方法,可以在实例化Spring应用程序上下文后在应用程序启动时调用它。

例如

@Component
public class AppStartupRunner implements ApplicationRunner {

    @Override
    public void run(ApplicationArguments args) throws Exception {
        // Setup or initialization activities
    }
}

或者您可以按照Aniket在评论中建议的方式创建Bean:

@Bean 
ApplicationRunner thisWillRunAutomatically() 
{
    return args -> { ... };
}

在此处了解有关Spring启动回调的更多信息:Spring boot callbacks