无论如何,我可以在我的程序中知道通过@PropertySource注释Spring加载的文件的完整路径。 我需要它在日志中显示,以便人们可以知道在应用程序中使用了哪个属性文件
答案 0 :(得分:2)
下面似乎有效,但我不确定该实例是否始终是ConfigurableEnvironment
类型
@Component
public class MyListener implements ApplicationListener<ContextRefreshedEvent>{
@Autowired
private Environment env;
private static final Logger log = LoggerFactory.getLogger(MyListener.class);
@Override
public void onApplicationEvent(ContextRefreshedEvent event) {
if(env instanceof ConfigurableEnvironment){
MutablePropertySources propertySources = ((ConfigurableEnvironment)env).getPropertySources();
for(PropertySource ps : propertySources){
log.info(ps.getName()); //if only file based needed then check if instanceof ResourcePropertySource
}
}
}
}
编辑:并不是真的需要这一切。正如Selim已经回答的那样,启用正确的日志可以解决问题
log4j.logger.org.springframework.core.env.MutablePropertySources=DEBUG
答案 1 :(得分:2)
此信息已由 StandardServletEnvironment 记录。您可以将 org.springframework.web.context.support.StandardServletEnvironment 类的日志级别设置为 DEBUG ,以在日志中显示详细信息。
如果使用spring-boot,只需将以下行添加到application.properties文件中即可。
logging.level.org.springframework.web.context.support.StandardServletEnvironment = DEBUG
答案 2 :(得分:0)
在当前 ('21) 版本的 Spring Boot 中,上述两个日志级别建议似乎都不起作用。此外 - 如果文件实际上没有被加载,因为它没有找到或出于其他任何原因,无论如何都不会打印任何内容。
在我将 ROOT 记录器设置为 DEBUG(application.properties 中的 logging.level.root=DEBUG)的那一刻,我在日志文件中看到的唯一内容,当文件正确加载并且 @Value 注释属性解析成功是:
<块引用>2021-07-23 11:06:10.299 DEBUG 16776 --- [restartedMain] o.s.b.f.s.DefaultListableBeanFactory :创建共享实例 单例 bean 'bahblahService'
2021-07-23 11:06:10.302 DEBUG 16776 --- [restartedMain] o.s.c.e.PropertySourcesPropertyResolver:找到密钥 'blahblah.username' 在 PropertySource '类路径 资源 [custom-local.properties]' 类型为 String