我有一个用于初始化它的数据结构,我需要向数据库发出请求,然后调用将为数据结构准备数据的对象,然后才对其进行初始化。在启动 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 回答
当年话下
TA贡献1890条经验 获得超9个赞
如果您想在 Spring boot 应用程序启动时设置/初始化某些内容,您应该使用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 -> { ... };
}
添加回答
举报
0/150
提交
取消