2016-04-06 2 views
0

Ich habe die folgende Definition meiner Immobilie im Java-Code:Warum verhindert der Standardwert in Spring Value den NULL-Fehler nicht?

import org.springframework.beans.factory.annotation.Value; 
... 
@Value("#{sdProperties['is.test.server'] ?: false }") 
private boolean isTestServer = false; 

Auch in der XML-Konfigurationsdatei habe ich:

<util:properties id="sdProperties"> 
    <prop key="sdzootest.server.url">${sdzootest.server.url}</prop> 
    <prop key="is.test.server">${is.test.server}</prop> 
</util:properties> 

Trotzdem ich die Störung erhalte, wenn is.test.server nicht angegeben in der Eigenschaftsdatei:

2016-04-06 15: 52: 00.161 [localhost-Start-Stopp-1] ERROR com.elasticpath.web.context.impl.EpCont extConfigListener: 69 - eine Ausnahme gefangen. org.springframework.beans.factory.BeanDefinitionStoreException: Ungültige Bean Definition mit dem Namen sdProperties in null definiert: Könnte nicht Platzhalter 'is.test.server' in String-Wert "$ {is.test.server}" lösen

+0

Ich denke, Sie müssen einen Standardwert für ' $ {is.test.server}'. Probieren Sie ' $ {is.test.server: default}' –

Antwort

1

PlaceholderConfigurerSupport hat eine besondere Eigenschaft ignoreUnresolvablePlaceholders

Wenn ein configurer keinen Platzhalter, ein BeanDefinitionStoreException lösen kann, wird geworfen werden. Wenn Sie für mehrere Eigenschaftendateien überprüfen möchten, geben Sie mehrere Ressourcen über die Eigenschaft locations an. Sie können auch mehrere Konfiguratoren definieren, die jeweils mit einer eigenen Platzhaltersyntax haben. Verwenden Sie ignoreUnresolvablePlaceholders to absichtlich unterdrücken das Auslösen einer Ausnahme, wenn ein Platzhalter nicht gelöst werden kann.

Es ist nicht klar, wie Sie Setup-Platzhalter-Unterstützung, so dass hier mehrere Möglichkeiten:

<context:property-placeholder 
     ignore-unresolvable="true" 
     location="classpath:app.properties"/> 

oder

@Bean 
public PropertySourcesPlaceholderConfigurer ppc() { 
    PropertySourcesPlaceholderConfigurer ppc = new PropertySourcesPlaceholderConfigurer(); 
    ppc.setIgnoreUnresolvablePlaceholders(true); 
    return ppc; 
} 
+0

Ich versuchte add context: property-placeholder in der Konfigurationsdatei - hat nicht geholfen. Ich habe sowohl sd.properties als auch app.properties ausprobiert. Über den 2. Vorschlag - sollte es in der @Configuration-Datei sein? –

+0

@AlexNarinsky Ja, die Methode sollte in der Klasse "@ Configuration" Annotation sein – Evgeny

Verwandte Themen