Spring @ConfigurationProperties没有注入任何东西,字段保持为null

时间:2017-06-12 15:27:37

标签: java spring-boot null yaml snakeyaml

我正在尝试将值注入到这样的字段中:

@Component
@ConfigurationProperties("paypal")
public class Paypal
{
    private List<List<List<String>>> deleterequest;

    public List<List<List<String>>> getDeleterequest()
    {
        return deleterequest;
    }

    public void setDeleterequest(List<List<List<String>>> deleterequest)
    {
        this.deleterequest = deleterequest;
    }


    private String date;

    public String getDate()
    {
        return date;
    }

    public void setDate(String date)
    {
        this.date = date;
    }
}

注意:Paypal bean本身已成功加载,而不是null。 使用@Value读取值可以在该类中正常工作。我的主要课程也注明了:

@EnableConfigurationProperties

但是date和deleterequest在这段代码中都保持为null:

@Autowired
private Paypal propsPayPal;

this.propsPayPal.getDeleterequest(); //returns null (no NPE!)
this.propsPayPal.getDate(); //returns null (no NPE!)

在Spring Java Config中我写道:

@Bean
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer()
{
    PropertySourcesPlaceholderConfigurer o = new PropertySourcesPlaceholderConfigurer();
    YamlPropertiesFactoryBean yaml = new YamlPropertiesFactoryBean();
    yaml.setResources(new ClassPathResource(Constants.PROPERTIES_FILE_NAME));
    o.setProperties(yaml.getObject());
    return o;
}

@Bean
public Paypal paypal()
{
    return new Paypal();
}

我的 application.yml 如下所示:

paypal:
    date: Datum
    deleterequest:
    -
        -
            - Typ
            - Allgemeine Abbuchung
        -
            - Status
            - Abgeschlossen

任何帮助?

编辑:我发现当我使用AnnotationConfigApplicationContext(在我的主程序中使用)创建一个新的Spring项目(仅用于测试此问题)作为Context时,它没有注入任何值。使用ConfigurableApplicationContext(通过.SpringApplication.run(...))可以很好地工作,变量将被注入。我必须让它在AnnotationConfigApplicationContext上工作。

1 个答案:

答案 0 :(得分:0)

解决方案是切换到ConfigurableApplicationContext。 我使用了AnnotationConfigApplicationContext,它不支持此功能。