的Java的配置我的春天引導參考指南中讀到這裏春季啓動ApplicationPidListener
,一個ApplicationPidListener可以在春季啓動的應用程序進行編程設置。這很好,但我想再多一點。
當我設置ApplicationPidListener每參考指南這樣
app.addListeners(new ApplicationPidListener(pidFileName));
隨後象這樣啓動
app.run(arguments.toArray(new String[arguments.size()]))
該應用於是我obseved該特性的任何命令行覆蓋不可用的是可能已被用於實例化ApplicationPidListener pid文件位置。當然,我可以自己解析命令行參數,查找應該用來實例化ApplicationPidListener的屬性,但我寧願不這樣做。
我的問題或許可以解決,如果我能提供ApplicationPidListener作爲一個Bean在Java配置這樣
@Configuration
public static class TestConfig {
@Bean
public ApplicationListener pidListener(@Value("${pidFile:app.pid}") String prop) {
return new ApplicationPidListener(prop);
}
}
,並通過configurationSources.toArray提供這種配置的SpringApplication的構造函數()
new SpringApplication(null, configurationSources.toArray())
通過這種方式,ApplicationPidListener可以全面瞭解Spring Boot解析的屬性,包括命令行覆蓋。但是,即使此Config導致創建Bean,當然,它顯然不會被應用程序上下文用於創建PID文件。
我的問題是我在編程時被限制爲在調用run之前添加偵聽器,這意味着我必須查看命令行參數以查看是否存在pid文件覆蓋?
謝謝。
你爲什麼不簡單地合併命令行參數和你的'配置資源'包含什麼?無論如何,這些'configurationSources'是什麼?爲什麼你需要其他的東西不能用默認的Spring Boot配置支持來實現? – 2014-09-24 05:54:06
這是一個類似模板的應用程序,在配置SpringApplication和調用SpringApplication.run()之上具有構建器層。構建器層的存在是爲了讓新的微服務開發人員不必非常詳細地瞭解Spring Boot配置。 – ae6rt 2014-09-24 08:41:10