我有一個用于初始化它的數(shù)據(jù)結(jié)構(gòu),我需要向數(shù)據(jù)庫發(fā)出請求,然后調(diào)用將為數(shù)據(jù)結(jié)構(gòu)準(zhǔn)備數(shù)據(jù)的對象,然后才對其進行初始化。在啟動 spring-mvc 應(yīng)用程序之前我該怎么做?我正在嘗試使用 @PostConstruct 和 @EventListener(ApplicationReadyEvent.class) 等注釋,但它們是隨 spring 應(yīng)用程序啟動的,目前數(shù)據(jù)結(jié)構(gòu)尚未初始化。有代碼示例: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 回答

當(dāng)年話下
TA貢獻1890條經(jīng)驗 獲得超9個贊
如果您想在 Spring boot 應(yīng)用程序啟動時設(shè)置/初始化某些內(nèi)容,您應(yīng)該使用ApplicationRunner或CommandLineRunner。
Spring boot 提供了一個ApplicationRunner帶有回調(diào) run() 方法的接口,可以在實例化 Spring 應(yīng)用程序上下文后在應(yīng)用程序啟動時調(diào)用該方法。
例如
@Component
public class AppStartupRunner implements ApplicationRunner {
? ? @Override
? ? public void run(ApplicationArguments args) throws Exception {
? ? ? ? // Setup or initialization activities
? ? }
}
或者您可以按照 Aniket 在評論中的建議創(chuàng)建 Bean:
@Bean?
ApplicationRunner thisWillRunAutomatically()?
{
? ? return args -> { ... };
}
添加回答
舉報
0/150
提交
取消