首页 > 解决方案 > 覆盖依赖 jar 文件中的 spring-boot 属性

问题描述

我有一个 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 中的覆盖值。

标签: springspring-bootconfigurationproperties

解决方案


免责声明:

A 没有办法重现您的问题,这只是一个建议。


注意没有@Configurationon GoogleProperties

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

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

文档中所述,您还可以在主类或需要这些道具的
@ConfigurationPropertiesScan({ "com.google.SDK", "org.acme.another" })任何类之上使用:@Configuration

注意正如这里所解释的,从 spring-boot 2.2 开始,我们不再需要配置属性功能@Configuration@EnableConfigurationProperties配置属性功能已经过时了。


推荐阅读