我有一些要初始化的数据结构,我需要向数据库发出请求,然后调用将为数据结构准备数据并仅对其进行初始化的对象。在启动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();
}
...
}
答案 0 :(得分:2)
如果您想在Spring启动应用程序启动时设置/初始化某些内容,则应该使用ApplicationRunner
或CommandLineRunner
。
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