获取@PropertySource加载的文件的名称

时间:2015-12-23 11:01:48

标签: java spring properties

无论如何,我可以在我的程序中知道通过@PropertySource注释Spring加载的文件的完整路径。 我需要它在日志中显示,以便人们可以知道在应用程序中使用了哪个属性文件

3 个答案:

答案 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