Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring引导:Spring始终为属性分配默认值,尽管它存在于.properties文件中_Java_Spring_Spring Boot_Spring Annotations - Fatal编程技术网

Java Spring引导:Spring始终为属性分配默认值,尽管它存在于.properties文件中

Java Spring引导:Spring始终为属性分配默认值,尽管它存在于.properties文件中,java,spring,spring-boot,spring-annotations,Java,Spring,Spring Boot,Spring Annotations,我正在使用SpringBoot1.1.8,它使用Spring4.0.7。我正在用@Value注释自动连接类中的属性。如果属性文件中不存在该属性,我希望有一个默认值,因此,我使用“:”来指定默认值。下面是一个例子: @Value("${custom.data.export:false}") private boolean exportData = true; 如果属性文件中不存在属性,则应将false赋值给变量。但是,如果文件中存在属性,则它还会指定默认值并忽略属性值。 例如,如果我定义了如上所

我正在使用SpringBoot1.1.8,它使用Spring4.0.7。我正在用@Value注释自动连接类中的属性。如果属性文件中不存在该属性,我希望有一个默认值,因此,我使用“:”来指定默认值。下面是一个例子:

@Value("${custom.data.export:false}")
private boolean exportData = true;
如果属性文件中不存在属性,则应将false赋值给变量。但是,如果文件中存在属性,则它还会指定默认值并忽略属性值。 例如,如果我定义了如上所述的属性,并且应用程序属性文件具有类似这样的内容
custom.data.export=true
,则
exportData
的值仍将为false,而理想情况下应为true

谁能告诉我我做错了什么


谢谢

我们被以下春季虫子叮咬,症状完全相同:

基本上,如果ApplicationContext中存在多个
PropertyPlaceHolderConfigure
,则只会解析预定义的默认值,不会发生重写。设置不同的
IgnoreUnsolvablePlaceholders
值对该问题没有影响,一旦我们删除了额外的
PropertyPlaceholderConfigurer
,这两个值(真/假)在这方面同样有效


仔细研究,每个已定义的
属性PlaceHolderConfigure
都按照预期在内部解析了属性,但Spring无法确定使用哪一个属性向
@value
注释字段/参数中注入值。

您可以执行以下操作之一来克服此问题:

  • 在配置程序中使用自定义valueSeparator

  • 正如@Ophir Radnitz所述,这是一个spring错误,当ApplicationContext中存在多个PropertyPlaceHolderConfiguration时会发生

    作为一种解决方法,您可以通过以下方式获得所需的行为:

    (...)
    
    @Autowired
    private Environment environment;
    
    (...)
    
    private Boolean shouldExportData()
    {        
        return environment.getProperty( "custom.data.export", Boolean.class, Boolean.FALSE );
    }
    

    我已经测试过了,一切正常。如果Property缺少默认值(false)。它应该可以工作。为什么您的字段初始化为true?!您是否可以添加执行器并查看/env端点以再次检查配置是否已按预期应用?好的,在其中一个依赖项中,“IgnoreUnsolvablePlaceholders”参数已设置为true。因此,spring始终使用默认值,从不查看application.properties文件。通过注释掉那一块来解决它。谢谢。@DarshanMehta,它如何在应用程序属性中设置此属性?我的意思是如何在application.propertes中将IgnoreUnsolvablePlaceholder设置为false。