【问题标题】:PropertySource property file is being ignored by scanning env property filePropertySource 属性文件被扫描 env 属性文件忽略
【发布时间】:2020-04-09 16:45:56
【问题描述】:

在我的 Spring Boot 项目中,我将 env 属性(application-dev.prop)文件直接放在资源文件夹下,该属性文件定义了一些连接属性。在 user.properties 文件中定义的具有不同值的相同连接属性(需要注入到特定的配置类中)放置在 resources/config 下。我已经用 @PropertySource(value = "classpath:/config/用户属性”)。但是,这个配置类从 env 属性文件中获取连接值,而不是从 user.prop 文件中获取连接值,即使该类使用属性源 user.property 类路径进行了注释。如果 env 属性文件中未定义特定字段,则此配置类仅接受 user.property 值。简而言之,它仅在 env.property 文件中未定义任何字段/属性时才检查 user.property 文件。但我希望这个配置类始终指向 user.property 文件。我已经检查了用于扫描属性文件的 Spring Boot 优先级,但无法解决。谁能帮我解决这个问题。

【问题讨论】:

    标签: java spring-boot spring-profiles spring-properties


    【解决方案1】:

    根据文档,

    In cases where a given property key exists in more than one .properties file,
    the last @PropertySource annotation processed will 'win' and override.
    

    如果适合您的用例,我认为更好的方法是使用配置文件。 链接here 解释了如何巧妙地添加配置文件。你可以去看看。

    如果您认为添加配置文件不是正确的选择,我建议您使用另一种方法,您可以将它们作为环境变量传递下去。这使您可以根据需要灵活更改它,您还可以为环境变量提供默认值。

    【讨论】:

    • 谢谢 Nithin,实际上我需要同时指向两个属性文件。我需要为我的应用程序指向 Env-prop 文件,并且 user.property 文件应该只在配置类中指向/引用。这里的问题是,即使我使用 @propertysource (value=classpath:/user.property) 注释了该配置类,该配置类仍然指向 env-prop 文件。我指的是两个道具文件中都存在的属性,我无法重命名这些属性字段(因为它们是预定义的属性名称)。
    • 我尝试设置系统属性方法,但认为我在 env 变量中设置的任何属性对于我的应用程序都是通用的(不允许我引用另一个我想引用的集合)
    • 我之前可能误解了您的问题,您希望从两个文件以及您正在使用的同一项目的不同部分加载相同的属性。因此,您可能同时需要两者,但可能在不同的课程中。我说的对吗?
    • 对 Nithin。这就是我的用例。
    • 如果你想通过 spring 填充它,我认为除了更改其中一个的键之外别无他法。您也可以将其作为普通属性文件读取并使用。
    猜你喜欢
    • 2019-07-19
    • 2013-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多