0

我的项目应用程序和启动器中有 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 中定义的应用程序部分覆盖此配置?

4

1 回答 1

1

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

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

private String name = "DefaultName";
private int number = 101;
于 2018-11-19T02:32:56.803 回答