我们的Spring applicationContext.xml中有这行:

<context:property-placeholder location="classpath*:*.properties" />


但这并不是找到并替代我们认为应该的特定财产价值。有什么方法可以使这个特殊的属性占位符告诉我们它正在查找的路径,它正在查找的文件以及它所看到的属性?

最佳答案

您可以将PropertyPlaceHolderConfigurer子类化,如下所示:

public class LoggingPlaceholderConfigurer extends PropertyPlaceholderConfigurer {

    @Override
    public void setLocations(final Resource[] locations) {
        if(logger.isDebugEnabled())
            for (final Resource resource : locations) {
                logger.debug("Using resource: " + resource);
            }
            super.setLocations(locations);
    }

    @Override
    protected Properties mergeProperties() throws IOException {
        final Properties mergedProperties = super.mergeProperties();
        if(logger.isDebugEnabled())
            for (final Entry<String, Object> propertyEntry :
                new TreeMap<String, Object>((Map) mergedProperties).entrySet()) {

                logger.debug(
                    "Key:" + propertyEntry.getKey()
                + ", value:" + propertyEntry.getValue());
            }
        return mergedProperties;
    }

}


现在手动连接自定义类(命名空间将不起作用):

<bean class="path.to.LoggingPlaceholderConfigurer">
  <property name="locations" value="classpath*:*.properties" />
</bean>


并设置您的日志记录配置,以使LoggingPlaceholderConfigurer的日志级别调试处于活动状态

(这是<context:property-placeholder>的临时替代品,仅用于调试目的)

关于java - 我可以让Spring <context:property-placeholder/>告诉我它正在寻找什么类路径吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5896659/

10-11 06:29