2017-03-08 147 views
0

我有一個非常簡單的application.yml文件:春天引導忽略spring.config.name/location性能

spring: 
    config: 
    name: android,ios,test,web 

enter image description here

我希望獲得命名的配置文件像android.yml並把能力它們變成

classpath:/,classpath:/config/,file:./,file:./config/ 

ConfigFileApplicationListener類指定DEFAULT_SEARCH_LOCATIONS恆定。我創建在同一目錄中的文件與主配置:

android: 
    clientId: 0 
    clientSecret: clientSecret 

enter image description here

然後我寫了一個@Configuration類的一個方法來獲得由@ConfigurationProperties一個的ClientDetails實例:

@Configuration 
public class TrustedClientInformationConfiguration { 

    @Bean(name = ANDROID) 
    @ConfigurationProperties(prefix = ANDROID) 
    public ClientDetails getAndroidClientDetails() { 
     return new BaseClientDetails(); 
    } 

} 

不幸的是,自動裝配後,我得到了未填充字段的實例。我錯過了什麼?

EDIT1:我發現和調試在使用CONFIG_NAME_PROPERTY = "spring.config.name"的方法(這是唯一一個使用),該containsProperty條件總是返回false

private Set<String> getSearchNames() { 
    if (this.environment.containsProperty(CONFIG_NAME_PROPERTY)) { 
     return asResolvedSet(this.environment.getProperty(CONFIG_NAME_PROPERTY), 
       null); 
    } 
    return asResolvedSet(ConfigFileApplicationListener.this.names, DEFAULT_NAMES); 
} 

EDIT2:這是一個嘗試,以建立OAuth2客戶端配置將屬性移動到每個可信客戶端的單獨文件。他們應該總是實例化,儘管活動配置文件。

回答

1

spring.config屬性應該在命令行上設置,因爲它們在加載任何配置文件之前都需要。

但它看起來像你真正想要的功能是profiles。對於不同的環境組織不同的配置,它們更容易。文件可以被命名爲application-androidapplication-test

Documentation

+0

@AndrewTobilko以及再看看答案的第一段,或使用'@ PropertySource',或'PropertiesConfigurationFactory'做手工。 – OrangeDog