我希望记录应用程序正在加载application-profile.propeties或application.yml。怎么做。在哪种方法中,我可以监听并检测到它是否成功加载或失败。
答案 0 :(得分:1)
您可以通过添加侦听ApplicationReadyEvent
@Component
public class LoadedConfigFileListener implements ApplicationListener<ApplicationReadyEvent>, Ordered {
private static final Logger logger = LoggerFactory.getLogger(LoadedConfigFileListener.class);
@Override
public void onApplicationEvent(ApplicationReadyEvent event) {
MutablePropertySources propertySources = event.getApplicationContext().getEnvironment().getPropertySources();
Iterator<PropertySource<?>> propertySourceIterator = propertySources.iterator();
propertySourceIterator.forEachRemaining(propertySource -> logger.info("Successfully loaded: \"{}\" into application context", propertySource.getName()));
}
@Override
public int getOrder() {
return ConfigFileApplicationListener.DEFAULT_ORDER + 1;
}
}
答案 1 :(得分:1)
如果要调试加载属性,请添加以下环境变量(启动Java代码时的命令行参数):
logging.level.org.springframework.core.env=DEBUG
您可以在日志行中看到例如:
2017-05-23 08:37:00.773 DEBUG 26152 --- [ main] o.s.core.env.MutablePropertySources : Adding [applicationConfig: [file:./application.properties]] PropertySource with lowest search precedence
...
2017-05-23 08:37:00.774 DEBUG 26152 --- [ main] o.s.c.e.PropertySourcesPropertyResolver : Found key 'server.port' in [applicationConfig: [file:./application.properties]] with type [String]
...
2017-05-23 08:37:02.087 DEBUG 26152 --- [ main] o.s.c.e.PropertySourcesPropertyResolver : Found key 'spring.datasource.url' in [applicationConfig: [file:./application.properties]] with type [String]
答案 2 :(得分:0)
24.4特定于配置文件的属性
除 application.properties 文件外,还可以使用命名约定application- {profile} .properties定义特定于配置文件的属性。
环境有一组默认配置文件(默认情况下为[默认]),如果未设置活动配置文件,则使用这些配置文件(即,如果没有显式激活配置文件,则加载application-default.properties中的属性)。
特定于配置文件的属性从与标准application.properties相同的位置加载,特定于配置文件的文件始终覆盖非特定文件,而不管特定于配置文件的文件是在打包的jar内部还是外部。
如果指定了多个配置文件,则应用最后获胜策略。例如,spring.profiles.active属性指定的配置文件是在通过SpringApplication API配置的配置文件之后添加的,因此优先。
例如:您可以在appliation.properties中设置个人资料名称
K
将加载dev配置文件。
答案 3 :(得分:0)
Spring Boot应用程序的初始日志输出有什么问题?当我开始一个开箱即用的春季启动应用程序时,前5行之一是:
2017-05-23 23:09:59 INFO e.r.t.MyApplication - No active profile set, falling back to default profiles: default
该日志输出告诉我已加载默认(application.yml)属性文件。对于所有处于活动状态的配置文件,将加载相应的属性文件。
例如,如果这是我的日志输出:
2017-05-23 23:14:32 INFO e.r.t.MyApplication - The following profiles are active: cloud, dev, special
然后将加载 ALL 这些属性文件(注意,您可以互换.properties和.yml):
application.yml
application-cloud.yml
application-dev.yml
application-special.yml
FURTHERMORE,请记住Spring Boot允许以读取属性文件的顺序覆盖属性,因此最后加载的属性文件获胜。在这种情况下,如果我声明了一个属性,在上述所有4个属性文件中调用它my.property
,只会加载application-special.yml
中的值,因为它是最后一个应用的配置文件。