我想在屏幕上打印从配置文件中加载的所有属性。我该怎么做呢?我找不到太多关于这方面的信息。
这是因为我可以用参数--spring.config.location加载配置文件,并且我想看看我是否正确地加载了该文件。
我正在寻找一个控制台解决方案,在流程实际开始执行任务之前,我可以打印一些内容。
发布于 2017-02-23 10:41:39
如果您使用Spring,您将得到一个端点,它显示了这些信息。
若要启用此功能,请向项目中添加以下依赖项:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>输出应该如下所示:
{
"profiles": [
],
"bootstrap": {
},
"commandLineArgs": {
},
"servletContextInitParams": {
},
"systemProperties": {
"jboss.i18n.generate-proxies": "true",
"java.runtime.name": "Java(TM) SE Runtime Environment",
"java.protocol.handler.pkgs": "null|org.springframework.boot.loader",
...
},
"systemEnvironment": {
"LOCALAPPDATA": "C:\\Windows\\system32\\config\\systemprofile\\AppData\\Local",
"PROCESSOR_LEVEL": "6",
"ProgramFiles": "C:\\Program Files",
"PUBLIC": "C:\\Users\\Public",
"NUMBER_OF_PROCESSORS": "2",
"windir": "C:\\Windows",
...
},
"applicationConfig: [file:.\/application.yml]": {
"server.port": 11016,
"server.tomcat.access-log-enabled": true,
"server.tomcat.access-log-pattern": "%h %l %u %t \"%r\" %>s %b %D",
"server.tomcat.basedir": ".\/",
...
},
"applicationConfig: [classpath:\/application.yml]": {
...
"spring.messages.basename": "messages",
"spring.messages.cache-seconds": -1,
"spring.messages.encoding": "UTF-8"
},
"defaultProperties": {
"spring.application.name": "bootstrap"
}
}它显示了所有已加载的配置文件,包括默认值、系统属性、通过配置服务加载的属性、.。
发布于 2020-04-09 22:27:16
这是帮助吗可以吗?我在Spring Boot问题追踪器上找到的。
我粘贴它以供快速参考,但请记住,最初的作者是桑多-内梅斯。
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("===========================================");
}
}发布于 2021-03-17 01:32:48
下面是我的版本,它将它收集到一个映射中,并使用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);虽然通常我只做最后一部分的调试,但我通常在最后一个平台上结束,并从那里组装我需要的数据。
https://stackoverflow.com/questions/42412793
复制相似问题