gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 01:17:49 24 4
gpt4 key购买 nike

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

...

}

最佳答案

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

Spring boot 提供了一个带有回调 run() 方法的 ApplicationRunner 接口(interface),可以在实例化 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

关于java - 如何在启动spring应用程序之前初始化数据结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58245878/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com