【发布时间】: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.ymlid 为空白,您的应用程序将记录并错误提示服务器启动失败 -
空白
application.yml被接受。为什么你认为它会失败? @死侍 -
好吧可能是因为你没有使用
@Value注解来注入属性,好吧当它是空白的时候private String name;和private int number;的值是什么? -
@ConfigurationProperties 应绑定。
标签: java spring-boot spring-boot-starter