2016-11-22 103 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