我想在屏幕上打印从配置文件加载的所有属性。我该怎么做?我找不到太多关于此的信息。
这是因为我可以使用参数 - spring.config.location 加载配置文件,我想看看我是否正确加载了文件。
我正在寻找一个控制台解决方案,我可以在流程真正开始执行任务之前打印出来。
答案 0 :(得分:5)
如果您使用Spring Boot Actuator,您将获得一个显示该信息的/env
endpoint。
要启用此功能,请将以下依赖项添加到项目中:
super.viewWillLayoutSubviews
输出应如下所示:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
显示所有已加载的配置文件,包括默认值,系统属性,通过配置服务加载的属性,....
答案 1 :(得分:0)
be this of help可以吗?我在Spring Boot问题跟踪器上找到了它。
我将其粘贴以供快速参考,但是请记住原始作者是sandor-nemeth。
package de.idealo.ecommerce.order.history.config;
import java.util.Arrays;
import java.util.stream.StreamSupport;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.context.event.EventListener;
import org.springframework.core.env.AbstractEnvironment;
import org.springframework.core.env.EnumerablePropertySource;
import org.springframework.core.env.Environment;
import org.springframework.core.env.MutablePropertySources;
import org.springframework.stereotype.Component;
@Component
public class PropertyLogger {
private static final Logger LOGGER = LoggerFactory.getLogger(PropertyLogger.class);
@EventListener
public void handleContextRefresh(ContextRefreshedEvent event) {
final Environment env = event.getApplicationContext().getEnvironment();
LOGGER.info("====== Environment and configuration ======");
LOGGER.info("Active profiles: {}", Arrays.toString(env.getActiveProfiles()));
final MutablePropertySources sources = ((AbstractEnvironment) env).getPropertySources();
StreamSupport.stream(sources.spliterator(), false)
.filter(ps -> ps instanceof EnumerablePropertySource)
.map(ps -> ((EnumerablePropertySource) ps).getPropertyNames())
.flatMap(Arrays::stream)
.distinct()
.filter(prop -> !(prop.contains("credentials") || prop.contains("password")))
.forEach(prop -> LOGGER.info("{}: {}", prop, env.getProperty(prop)));
LOGGER.info("===========================================");
}
}
答案 2 :(得分:0)
这是我的版本,它将它收集到地图中并使用方法 lambdas 它避免强制转换,因为我自动装配 StandardEnvironment
而不是 Environment
。工作方式与上述相同,但不那么传统,我使用了 ::cast
方法引用
final Map<String, Object> collect = env.getPropertySources()
.stream()
.parallel()
.filter(EnumerablePropertySource.class::isInstance)
.map(EnumerablePropertySource.class::cast)
.map(EnumerablePropertySource::getPropertyNames)
.flatMap(Arrays::stream)
.collect(HashMap::new, (a, e) -> a.put(e, env.getRequiredProperty(e)), Map::putAll);
System.out.println(collect);
虽然我通常只做最后一部分进行调试,但我通常会在最后一个平面图上结束并从那里组装我需要的数据。