2015-03-19 32 views
6

Şu anda bir özellik dosyası yükleyen bir Spring xml yapılandırması (Yay 4) kullanıyorum. özellikleriniSpring yer tutucusu, JavaConfig içindeki özellikleri çözmez

@Component 
public class MyComponent { 

    @Value("${my.app.other}") 
    private String others; 

} 

Bu mükemmel çalışıyor ve hariç olarak others değeri, MyService/sample olduğunu kullanmak

context.properties

my.app.service = myService 
my.app.other = ${my.app.service}/sample 

Bahar xml yapılandırma

<bean id="contextProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean"> 
    <property name="ignoreResourceNotFound" value="true" /> 
    <property name="fileEncoding" value="UTF-8" /> 
    <property name="locations"> 
     <list> 
      <value>classpath:context.properties</value> 
     </list> 
    </property> 
</bean> 
<bean id="placeholder" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="ignoreResourceNotFound" value="true" /> 
    <property name="properties" ref="contextProperties" /> 
    <property name="nullValue" value="@null" /> 
    <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" /> 
</bean> 

Bean. Ancak bu yapılandırmayı bir JavaConfig ile değiştirmeye çalıştığımda, bileşenimdeki @Value aynı şekilde çalışmıyor. Değer myService/sample değil, ${my.app.service}/sample değil.

@Configuration 
@PropertySource(name="contextProperties", ignoreResourceNotFound=true, value={"classpath:context.properties"}) 
public class PropertiesConfiguration { 

    @Bean 
    public static PropertyPlaceholderConfigurer placeholder() throws IOException { 
     PropertyPlaceholderConfigurer placeholder = new PropertyPlaceholderConfigurer(); 
     placeholder.setNullValue("@null"); 
     placeholder.setSystemPropertiesMode(PropertyPlaceholderConfigurer.SYSTEM_PROPERTIES_MODE_OVERRIDE); 
     return placeholder; 
    } 

} 

Xml'den Javaconfig'e dönüştürme işleminde bir şeyi özledim mi?

ps: Ayrıca bir PropertyPlaceholderConfigurer yerine PropertySourcesPlaceholderConfigurer'u daha fazla başarıya ulaştırmaya çalışıyorum. Yapılandırma PropertySourcesPlaceholderConfigurer'u kullanmak üzere güncelleştirmek için güncelle

+0

Sorununuzu çözmese bile, 'PropertySourcesPlaceholderConfigurer' kullanmanız gerektiğini onaylayabilirim, 'PropertyPlaceholderConfigurer' değil, – superbob

+0

' my.app.service' özelliği düzeltilsin mi? '@Value (" $ {my.app.service} ")' ile kontrol edin, sorun özellik kümesinden geliyorsa dolaşırım. – superbob

cevap

2

Sadece @PropertySource ek açıklama sahip yeterli olmayacaktır:

@Bean 
public static PropertySourcesPlaceholderConfigurer properties() { 
    return new PropertySourcesPlaceholderConfigurer(); 
} 

@PropertySource açıklama otomatik Bahar ile PropertySourcesPlaceholderConfigurer kaydetmez. Dolayısıyla biz JIRA bilet Bu tasarımın arkasındaki mantığı konusunda daha fazla bilgi Aşağıda açıkça PropertySourcesPlaceholderConfigurer

yapılandırmanız gerekir:

https://jira.spring.io/browse/SPR-8539

GÜNCELLEME: düzenlendi basit Bahar çizme uygulaması iç içe özelliklerini kullanmak. Yukarıdaki yapılandırma ile iyi çalışıyor.

https://github.com/mgooty/property-configurer/tree/master/complete

+0

Yanıtı güncelledim. – Mithun

+0

Bence OP zaten bunu yaptı ve işe yaramadı, sorudaki 'ps'lerini görün. Sorun, yuva iç içe geçmiş gibi görünüyorsa dolaşıyorum ('my.app.other = $ {my.app.service}/sample') – superbob

1

Başka bir seçenek PropertyPlaceholderAutoConfiguration.class içe aktarmaktır.

import org.springframework.boot.autoconfigure.PropertyPlaceholderAutoConfiguration; 

@Import(PropertyPlaceholderAutoConfiguration.class) 

Ek açıklama, eğer varsa, bir PropertySourcesPlaceholderConfigurer içeriyor.

+0

Evet, bu ** ilkbahar-önyükleme ** tabanlı bağlam için çalışır. –

İlgili konular