2013-05-24 10 views
23

Chcę zdefiniować domyślną wartość właściwości w pliku konfiguracyjnym Spring XML. Chcę, aby ta domyślna wartość to null.Określ domyślną wartość właściwości jako NULL na wiosnę

coś takiego:

... 
<ctx:property-placeholder location="file://${configuration.location}" 
          ignore-unresolvable="true" order="2" 
          properties-ref="defaultConfiguration"/> 

<util:properties id="defaultConfiguration"> 
    <prop key="email.username" > 
     <null /> 
    </prop> 
    <prop key="email.password"> 
     <null /> 
    </prop> 
</util:properties> 
... 

To nie działa. Czy jest nawet możliwe zdefiniowanie domyślnych wartości właściwości w konfiguracji Spring XML?

+0

Odpowiedziano własne pytanie. Użyj ooops

+0

Nie działa w ten sposób: 'Nieprawidłowa zawartość zaczynająca się od elementu 'null'. W tym momencie nie oczekuje się elementu potomnego. " –

+0

Nie sądzę, że można to zrobić. Może wystarczy usunięcie tych właściwości. Właściwości Java zwróci wartość null, jeśli właściwość nie jest zdefiniowana. – soulcheck

Odpowiedz

66

Lepiej jest używać Wiosna EL w taki sposób

<property name="password" value="${email.password:#{null}}"/> 

sprawdza czy email.password jest określona i ustawia go do null (nie "null" String) inaczej

+0

Idealny! Czy to wprowadza zależność od sprężynowego? –

2

Możesz spróbować użyć sprężyny EL.

<prop key="email.username">#{null}</prop> 
+0

To nie działa. 'prop' nie ma atrybutu" value ". Myślę, że jeśli istnieje rozwiązanie, należy użyć czegoś innego niż "prop". –

+0

Możesz umieścić EL między tagami, zmodyfikowanym anwser. – YoK

+2

W ten sposób generuje NPE 'Przyczyna: org.springframework.beans.factory.BeanCreationException: Błąd podczas tworzenia komponentu bean o nazwie 'defaultConfiguration': Inicjowanie komponentu bean nie powiodło się; Zagnieżdżony wyjątek to java.lang.NullPointerException' –

2

spojrzeć PropertyPlaceholderConfigurer#setNullValue(String)

Podaje, że:

Domyślnie żadna taka pusta wartość nie jest zdefiniowana. Oznacza to, że nie ma sposobu, aby wyrazić null jako wartość nieruchomości, chyba że explictly map odpowiednią wartość

Więc po prostu określić ciąg znaków „null” do mapowania wartości null w swoim PropertyPlaceholderConfigurer:

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="nullValue" value="null"/> 
    <property name="location" value="testing.properties"/> 
</bean> 

teraz można go używać w plikach właściwości:

db.connectionCustomizerClass=null 
db.idleConnectionTestPeriod=21600 
+1

Oznacza to również, że nie będzie można używać ciągu "null". –

+0

Powiedzmy sobie szczerze, kto ustawia jawny łańcuch '' null "' zamiast 'null'? – EpicPandaForce

+0

Właściwość hibernacji db.connectionCustomizerClass: Chcę ustawić com.mchange.v2.c3p0.example.InitSqlConnectionCustomizer lub null. Ustawienie jest konfigurowane poprzez filtrowanie Maven. –

0

wydaje się, można wykonać następujące czynności:

@Value("${some.value:null}") 
private String someValue; 

i

@Bean 
public static PropertySourcesPlaceholderConfigurer propertyConfig() { 
    PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer = new PropertySourcesPlaceholderConfigurer(); 
    propertySourcesPlaceholderConfigurer.setNullValue("null"); 
    return propertySourcesPlaceholderConfigurer; 
} 
Powiązane problemy