2015-02-06 16 views
6

Spring 4.0.7 kullanan Spring boot 1.1.8 ile çalışıyorum. Sınıflarımdaki özellikleri @ Otomatik değerine otomatik olarak yüklüyorum. Özellik dosyasında özellik yoksa, varsayılan değere sahip olmak istiyorum, varsayılan değeri atamak için ":" kullanın. mülkiyet yapmasıdır özellikler dosyasında mevcut değilseSpring Boot: Spring, her zaman .properties dosyasında yer almasına rağmen varsayılan değere varsayılan değer atar.

@Value("${custom.data.export:false}") 
private boolean exportData = true; 

Bu değişkene yanlış atamak gerekir: Aşağıda örnek. Ancak, dosyada özelliği varsa , sonra da varsayılan değeri atar ve özellik değerini yok sayar. E.g. Yukarıda belirtilen özellik gibi bir özelliği tanımladıysanız ve uygulama özellikleri dosyasının bu custom.data.export=true gibi bir özelliği varsa, exportData değeri hala yanlış olacaktır, oysa doğru olması gerekir.

Burada yanlış yaptığım şeyleri bana yollayabilir misiniz?

Teşekkür

+0

Test ettim ve her şey yolunda. Propery eksikse varsayılan değer alınır (false). –

+2

çalışması gerekir. Alanınız neden doğru olarak başlatıldı ?! Aktüatörü ekleyebilir ve konfigürasyonun beklediğiniz gibi uygulandığını kontrol etmek için/env uç noktasına bakabilir misiniz? –

+3

Bağımlılıklardan birinde aşağı doğru, "ignoreUnresolvablePlaceholders" parametresi true olarak ayarlandı. Bu nedenle, yay her zaman varsayılan değeri kullandı ve asla application.properties dosyasına bakmadı.Bu parçayı yorumlayarak çözmek için yönetildi. Teşekkürler. –

cevap

7
Bizim de aynı semptom aşağıdaki Bahar böcek tarafından ısırıldı

:

Temelde tek PropertyPlaceholderConfigurer fazla ApplicationContext mevcut ise

[SPR-9989] Using multiple PropertyPlaceholderConfigurer breaks @Value default value behavior

, sadece önceden tanımlanmış varsayılan olacak çözüldü ve geçersiz kılmalar olmayacak. Farklı bir ignoreUnresolvablePlaceholders değerinin ayarlanması, bu konu üzerinde hiçbir etkiye sahip değildi ve her iki değer de (true/false), ek PropertyPlaceholderConfigurer'u kaldırdıktan sonra bu açıdan eşit derecede iyi çalıştı.

Tanıtılan her PropertyPlaceholderConfigurer, dahili olarak beklendiği gibi özellikleri çözümledi, ancak Spring, @Value açıklamalı alanlara/paramlara bir değer enjekte etmek için hangi hangilerin kullanılacağını belirleyemedi.

1

Bu aşmak için aşağıdakilerden birini yapabilirsiniz:

<bean id="customConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
 
    <property name="location" value="file:${catalina.base}/conf/config2.properties"/> 
 
    <property name="ignoreUnresolvablePlaceholders" value="true"/> 
 
    <property name="valueSeparator" value="-defVal-"/> 
 
</bean>

sizin configurer içinde

  1. Kullanım özel valueSeparator
    1. sipariş özelliğini kullanarak ilgili konfigüratörün tercihini artırın

    <bean id="customConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
     
        <property name="location" value="file:${catalina.base}/conf/config2.properties"/> 
     
        <property name="ignoreUnresolvablePlaceholders" value="true"/> 
     
        <property name="order" value="-2147483648"/> 
     
    </bean?

    Ben bu konuda, available here bazı RND yaptık.

İlgili konular