【问题标题】:Spring Boot ignores spring.config.name/location propertiesSpring Boot 忽略 spring.config.name/location 属性
【发布时间】:2023-03-23 06:03:01
【问题描述】:

我有一个相当简单的application.yml 文件:

spring:
  config:
    name: android,ios,test,web

我希望能够命名像android.yml 这样的配置文件并将它们放入

classpath:/,classpath:/config/,file:./,file:./config/

正如ConfigFileApplicationListener 类中的DEFAULT_SEARCH_LOCATIONS 常量所指定的。我在与主配置相同的目录中创建了一个文件:

android:
  clientId: 0
  clientSecret: clientSecret

然后我编写了一个@Configuration 类,其中一种方法是通过@ConfigurationProperties 获取ClientDetails 的实例:

@Configuration
public class TrustedClientInformationConfiguration {

    @Bean(name = ANDROID)
    @ConfigurationProperties(prefix = ANDROID)
    public ClientDetails getAndroidClientDetails() {
        return new BaseClientDetails();
    }

}

不幸的是,在自动装配之后,我得到了带有未填充字段的实例。我错过了什么?

EDIT1:我发现并调试了一个使用CONFIG_NAME_PROPERTY = "spring.config.name"的方法(这只是一种用法),containsProperty 条件总是返回false

private Set<String> getSearchNames() {
    if (this.environment.containsProperty(CONFIG_NAME_PROPERTY)) {
        return asResolvedSet(this.environment.getProperty(CONFIG_NAME_PROPERTY),
                null);
    }
    return asResolvedSet(ConfigFileApplicationListener.this.names, DEFAULT_NAMES);
}

EDIT2:尝试通过将属性移动到每个受信任客户端的单独文件来创建 oauth2 客户端配置。尽管配置文件处于活动状态,但它们应该始终被实例化。

【问题讨论】:

    标签: java spring spring-boot yaml


    【解决方案1】:

    spring.config 属性应在命令行上设置,因为在加载任何配置文件之前需要它们。

    但是看起来您真正想要的功能是profiles。它们是为不同环境组织不同配置的一种更简单的方法。文件可以命名为application-androidapplication-test等。

    Documentation

    【讨论】:

      猜你喜欢
      • 2015-10-14
      • 1970-01-01
      • 2018-05-04
      • 1970-01-01
      • 2016-06-26
      • 2019-07-22
      • 1970-01-01
      • 2021-06-28
      • 1970-01-01
      相关资源
      最近更新 更多