2016-03-31 6 views
0

Aufgrund unseres recht komplexen properties -Datei-Setups können wir nicht einfach @PropertySource verwenden.PropertySourcesPlaceholderConfigurer und SPEL?

Hier ist die Eigenschaften-Datei:

connection.http.connectTimeout=15000 
#connection.http.readTimeout=${connection.http.connectTimeout} 
connection.http.readTimeout=#{30*1000} 

Die zweite Zeile noch und stellen readTimeout-15.000, aber

Die Bean-Klassen ist der Wert 0. nur an Ort und Stelle mit der dritten Zeile funktionieren würde:

@Component 
@ConfigurationProperties("connection") 
public class ConnectionConfig { 

    @NestedConfigurationProperty 
    private ConnectionSourceConfig http; 

    public ConnectionSourceConfig getHttp() { 
    return http; 
    } 

    public void setHttp(ConnectionSourceConfig http) { 
    this.http = http; 
    } 

} 

public class ConnectionSourceConfig { 

    private long connectTimeout; 

    private long readTimeout; 

    public long getConnectTimeout() { 
    return connectTimeout; 
    } 

    public void setConnectTimeout(long connectTimeout) { 
    this.connectTimeout = connectTimeout; 
    } 

    public long getReadTimeout() { 
    return readTimeout; 
    } 

    public void setReadTimeout(long readTimeout) { 
    this.readTimeout = readTimeout; 
    } 

} 

Mit einem PropertySourcesPlaceholderConfigurer scheint Spel von Arbeits zu stoppen:

@Configuration 
public class BaseAppConfig { 

    @Bean 
    public static PropertySourcesPlaceholderConfigurer properties(Environment environment) throws IOException { 
    String env = getEnvProperty(environment); 
    PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer(); 
    configurer.setLocations(getPropertiesFiles(env)); 
    configurer.setIgnoreResourceNotFound(true); 
    return configurer; 
    } 

habe ich versucht, einen schicken PropertySourcesPlaceholderConfigurer, aber convertPropertyValue() nie aufgerufen:

PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer() { 

     @Override 
     protected String convertPropertyValue(String originalValue) { 
     System.out.println("Parse " + originalValue); 
     return super.convertPropertyValue(originalValue); 
     } 

    }; 

Ich habe versucht, zu schauen, wie Spring seine Arbeit tut und es scheint, dass es mit s arbeitet. Ich sehe jedoch nicht, wie ich darin eins weben könnte.

Aber vielleicht einen Fehler in Bezug auf Spring Verarbeitung Lebenszyklus Ich mache ...

Antwort

1

Properties-Datei weise wird # als Kommentarblock betrachtet. Wenn Sie dies tun, endet Ihre Eigenschaftendatei mit einer Eigenschaft, die auf leer gesetzt wird.

connection.http.readTimeout=#{30*1000} rendert connection.http.readTimeout=, weil alles nach ignoriert wird.

+0

Oh Junge, so eine einfache Antwort! Das habe ich komplett "vergessen". Und während ich das sage schaue einfach auf mein Eigenschaften-Beispiel .... Es war dort ....... Großartiger blonder Moment .......... – sjngm

+0

Es war mir eine Freude in einem so schwierigen Moment zu helfen:) –

Verwandte Themen