Spring @ConfigurationProperties未填充

时间:2016-11-22 15:00:06

标签: spring spring-boot properties-file

我在使用@ConfigurationProperties功能时遇到问题。 可能,我遗漏了一些东西,因为这个机制看起来很简单,但对我来说,它不起作用。

我使用Spring Boot和以下主要的Application类

@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

然后,我试图在一个@Component中@Autowired QueuesProperties,我在弹簧集成流中使用了一个。 QueuesProperties已正确注入,但descr属性为null。

@Autowired
private QueuesProperties queuesConfiguration;

虽然这个

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

已正确评估。

我已经尝试了不同的配置或代码,但结果是一样的。我得到了QueuesProperties bean,但没有填充它。

我错过了什么?

1 个答案:

答案 0 :(得分:1)

如果在applciation.properties文件中编写wmq.in.queue.descr = description属性,那么阅读问题的方法并不十分清楚。我之所以这么说是因为您说使用@Value而不是

正确评估了属性
@Autowired
private QueuesProperties queuesConfiguration;

即使@PropertySource("file:config/queues.properties")让我认为你的wmq.in.queue.descr = description属性可能不是用applciation.properties编写的,而是写在file:config / queues.properties中。

求和 对于使用@ConfigurationProperties功能,您已在application.properties中编写属性,并在@ Component,@ Configuration等上使用@EnableConfigurationProperties(QueuesProperties.class),以及如下所示的带注释的类。

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

private final QueuesProperties queuesProperties;

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


.....


}

实际上你可以更改application.properties文件名自定义spring boot属性评估但是对于你的本地应用程序我不鼓励。我认为application.properties是一个很好的名称,用于命名放置应用程序配置属性的位置

我希望它可以帮到你