2016-11-22 98 views
2

我遇到使用@ConfigurationProperties功能的問題。 也許,我錯過了一些東西,因爲這個機制看起來很簡單,但對我而言,它不起作用。Spring @ConfigurationProperties未填充

我使用Spring啓動,具有下列主要應用類

@SpringBootApplication 
@EnableAspectJAutoProxy 
@EnableConfigurationProperties(QueuesProperties.class) 
@PropertySource("file:config/queues.properties") 
@ImportResource("classpath:/spring-config.xml") 
public class Application { 
    public static void main(String... args) { 
     ConfigurableApplicationContext ctx = SpringApplication.run(Application.class, args); 
    } 
} 

與QueuesProperties

@ConfigurationProperties(prefix = "wmq.in.queue") 
public class QueuesProperties { 
    private static final Logger LOGGER = LoggerFactory.getLogger(QueuesProperties.class); 

    private String descr; 

    public String getDescr() { 
     return descr; 
    } 

    public void setDescr(String descr) { 
     this.descr = descr; 
    } 
} 

屬性文件是非常簡單的(我試圖隔離問題)

wmq.in.queue.descr = description 

然後,我試圖在@Componen中@Autowired QueuesProperties我用在一個彈簧整合流與a。 QueuesProperties被正確注入,但descr屬性爲空。

@Autowired 
private QueuesProperties queuesConfiguration; 

而此

@Value("${wmq.in.queue.descr}") 
private String descr; 

被正確評估。

我用不同的配置或代碼做了很多嘗試,但結果是一樣的。我得到了QueuesProperties bean,但它沒有被填充。

我錯過了什麼?

回答

0

如果wmq.in.queue.descr = description屬性寫入applciation.properties文件中,那麼讀取該問題並不十分清楚。我說,因爲你說的屬性被正確地評估@Value而不是與

@Autowired 
private QueuesProperties queuesConfiguration; 

即使@PropertySource("file:config/queues.properties")讓我覺得可能是你的wmq.in.queue.descr = description屬性不是寫在applciation.properties但在文件中:配置/queues.properties。

總結 對於使用@ConfigurationProperties功能,你必須在application.properties寫的屬性和使用@EnableConfigurationProperties(QueuesProperties.class)上@Component,@Configuration等註釋的類象下面這樣。

@Component 
@EnableConfigurationProperties(QueuesProperties.class) 
public class YourBean { 
.... 

private final QueuesProperties queuesProperties; 

public YourBean(QueuesProperties queuesProperties){ 
    this.queuesProperties = queuesProperties; 
} 


..... 


} 

其實你可以改變application.properties文件名自定義春季啓動性能評估,但對當地的程序,我勸阻。我認爲application.properties一個好名字命名中,你把你的應用程序的配置屬性

我希望它可以幫助你

+0

我有一個application.properties文件的地方(實際上他們是2,一個在classpath中有默認值,另一個在文件config/application.properties中覆蓋),我也嘗試從外部屬性中加載屬性,但現在我試圖找出問題並添加了另一個屬性文件(file:config/queues.properties)只有一個屬性 'wmq.in.queue.descr = description' – nex

+0

您是否使用@EnableConfigurationProperties註釋了配置/組件類,如同我的示例一樣? –

+0

我用 @EnableConfigurationProperties(QueuesProperties)註釋了應用程序類。class)和@PropertySource(「file:config/queues.properties」) – nex