我的项目应用和启动程序中有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的启动器)的效果就消失了。
如何从启动程序中定义的应用中部分覆盖此配置?
答案 0 :(得分:1)
只有一个具有特定名称的Boot配置文件,无论它们在类路径中位于何处(即,您可以拥有application-test.yml
和application.yml
,但只能有一个) ,并且“更接近”运行时(胖jar)会覆盖更远的地方(嵌入式jar)。引导程序不合并内容,它仅读取单个application.yml
。
完成所需操作的最简单方法是正常使用Java并使用默认值初始化类变量:
private String name = "DefaultName";
private int number = 101;