【问题标题】:Spring boot auto-configuration and propertiesSpring Boot 自动配置和属性
【发布时间】:2019-04-21 09:10:47
【问题描述】:

我的项目应用程序和启动器中有 2 个模块。 Starter 包含 @Configuration 并告诉如何创建 ServiceFoo 的 bean。

@Configuration
@EnableConfigurationProperties(FooServiceConfiguration.class)
public class StarterFoo {

    @Bean
    public ServiceFoo defaultBean(FooServiceConfiguration conf){
      new ServiceFooImpl(conf.getName(), conf.getNumber());
    }

}

我的启动器中有另一个配置类。

import org.springframework.boot.context.properties.ConfigurationProperties;

@ConfigurationProperties("Foo")
public class FooServiceConfiguration {
    private String name;
    private int number;
    // + accessors
}

在我的首发中,我有 application.yml,其中有

Foo:
 name: DefaultName
 number: 101

starter 被配置为自动配置

META-INF/spring.factories

org.springframework.boot.autoconfigure.EnableAutoConfiguration=StarterFoo

我想对我的数字配置发表意见,用户永远不会担心并覆盖该数字。我希望用户在我的配置中覆盖名称。

只要我在应用程序(空白文件)中创建 application.yml,启动器配置(来自启动器的 application.yml)的效果就会消失。

如何从应用程序中部分覆盖此配置,该应用程序在 starter 中定义?

【问题讨论】:

  • 不清楚,如果application.yml id 为空白,您的应用程序将记录并错误提示服务器启动失败
  • 空白application.yml 被接受。为什么你认为它会失败? @死侍
  • 好吧可能是因为你没有使用@Value注解来注入属性,好吧当它是空白的时候private String name;private int number;的值是什么?
  • @ConfigurationProperties 应绑定。

标签: java spring-boot spring-boot-starter


【解决方案1】:

无论它们位于类路径中的哪个位置,都只能有一个具有特定名称的引导配置文件(即,您可以拥有application-test.ymlapplication.yml,但每个只有一个),并且“更接近" 运行时(胖罐子)覆盖更远的(嵌入式罐子)。引导不会合并内容,它只是读取单个application.yml

完成你想要的最简单的方法是正常使用Java并用你的默认值初始化类变量:

private String name = "DefaultName";
private int number = 101;

【讨论】:

  • 谢谢。是的,硬编码默认是一个选项。如果不是 application.yml 可能是 foo.yml 对于特定的 foo 启动器,我如何从配置中读取它?
  • 用例是我想控制我的组织中的一些第三方启动器并围绕它提供包装器启动器。那些包装器应该是外部启动器+我的配置
  • @user3833308 这个用例很难干净地处理。最简单的选项可能是使用特殊配置文件并提供application-profile.yml
  • 这样就可以了。谢谢 Chrylis,基本上我有一个启动器,我想在其中配置嵌入式 tomcat 的配置。如果您知道任何其他方式,请分享
  • @user3833308 这真的取决于组织设置;例如,除非您可以在最终项目中控制引导配置的细节,否则甚至不能使用 Tomcat(我更喜欢 Undertow)。
猜你喜欢
  • 2018-11-14
  • 2017-05-23
  • 2018-03-10
  • 2018-11-14
  • 1970-01-01
  • 2019-05-19
  • 2020-06-14
  • 1970-01-01
  • 2016-02-27
相关资源
最近更新 更多