【问题标题】:override spring-boot property in dependency jar file覆盖依赖 jar 文件中的 spring-boot 属性
【发布时间】:2021-03-06 19:53:49
【问题描述】:

我有一个 Spring Boot 项目,该项目依赖于第 3 方 SDK 库之一,其中包含一个带有一些谷歌云 URL 的 YAML 文件。

我想在我的 YAML 中覆盖这些值,这适用于我的大部分项目,但由于某种原因,这个特殊的依赖库没有运气。

依赖代码

@ConfigurationProperties("google")
public class GoogleProperties {
 String url;
..
..
}

Yaml 文件 application-google-prod.yaml

google:
     url: some url.

假设这是在一个名为 google-client-sdk-1.0.0

的 jar 中

我的代码

Yaml 文件 application-myapp-prod.yaml

spring:
  profiles:
    include: google-prod

google:
     url: OVERRIDE url.

所以我希望在调用 lib 中的代码时应该使用 OVERRIDE url,但它会继续使用 jar 文件的 yaml 中的一些 url。

任何指针?

编辑

SDK 包含另一个类 SDK 中带有以下注解的类

       @Configuation
       @PropertySource({"classpath:application-google-prod.yaml})

我认为这会迫使 SDK 从特定 YAML 中选择值,而忽略我的应用中 YAML 中被覆盖的值。

【问题讨论】:

    标签: spring spring-boot configurationproperties


    【解决方案1】:

    免责声明:

    A 没有办法复制你的问题,这只是一个建议。


    注意GoogleProperties 上没有@Configuration

    您必须在属性类上添加@Configuration: (在这种情况下不可能)或在要使用属性的类顶部添加 @EnableConfigurationProperties(GoogleProperties.class)

    例如:如果你想在所有应用程序中使用它们,你的主类。

    正如提到的in the docs,您还可以在您的主类或您需要这些道具的任何@Configuration 类顶部使用:
    @ConfigurationPropertiesScan({ "com.google.SDK", "org.acme.another" })

    注意As explained here,从 spring-boot 2.2 开始,我们不再需要 @Configuration@EnableConfigurationProperties 配置属性功能这一事实已经过时了。

    【讨论】:

    • 感谢您的回复菲利普。这些选项不走运。但我想我可能已经找到了问题所在。 SDK @Configuation @PropertySource({"classpath:application--google-prod.yaml}) 中还有另一个带有以下注释的类我认为这会迫使 SDK 从特定 YAML 中选择值,而忽略我的应用程序中的 YAML。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多