1. 程式人生 > >CommandLineRunner、EnvironmentAware在Spring boot啟動時執行初始化程式碼

CommandLineRunner、EnvironmentAware在Spring boot啟動時執行初始化程式碼

@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 類例項化之後需要做的初始化操作
	}
}