CommandLineRunner、EnvironmentAware在Spring boot啟動時執行初始化程式碼
阿新 • • 發佈:2019-02-01
@Component //如果有多個這樣的類時,可以通過Order指定執行順序,數值越小執行優先順序越高 @Order(value = 0) public class InitSystemConfig implements CommandLineRunner ,EnvironmentAware{ @Autowired SystemConfigDao systemConfigDao; /* * 在服務啟動後執行,會在@Bean例項化之後執行,故如果@Bean需要依賴這裡的話會出問題 */ @Override public void run(String... args) throws Exception { //這裡可以根據資料庫返回結果建立一些物件、啟動一些執行緒等 ConsumerSample.startConsumer(); } /* * 在SystemConfigDao例項化之後、@Bean例項化之前執行 * 常用於讀取資料庫配置以供其它bean使用 * environment物件可以獲取配置檔案的配置,也可以把配置設定到該物件中 */ @Override public void setEnvironment(Environment environment) { List<SystemConfig> list = systemConfigDao.getSystemConfig(); if(list != null && !list.isEmpty()){ for(SystemConfig systemConfig:list){ PropertiesUtil.setProperty(systemConfig.getConfigKey(), systemConfig.getConfigValue()); } } } }
SystemConfigDao是一個普通的dao,用於訪問資料庫,由於InitSystemConfig依賴於它,所以,SystemConfigDao會在InitSystemConfig之前被初始化。
除了上面這些方式,我們還能用註解@PostConstruct修飾方法來實現在類例項化之後(建構函式呼叫之後)去執行某些操作,如:
@Service
public class Test{
@PostConstruct
public void myInit(){
//TODO 類例項化之後需要做的初始化操作
}
}