Spring Boot自动配置和属性

时间:2018-11-19 01:56:44

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

我的项目应用和启动程序中有2个模块。入门程序包含@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

启动器已配置为自动配置

META-INF / spring.factories

org.springframework.boot.autoconfigure.EnableAutoConfiguration=StarterFoo

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

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

如何从启动程序中定义的应用中部分覆盖此配置?

1 个答案:

答案 0 :(得分:1)

只有一个具有特定名称的Boot配置文件,无论它们在类路径中位于何处(即,您可以拥有application-test.ymlapplication.yml,但只能有一个) ,并且“更接近”运行时(胖jar)会覆盖更远的地方(嵌入式jar)。引导程序不合并内容,它仅读取单个application.yml

完成所需操作的最简单方法是正常使用Java并使用默认值初始化类变量:

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