Могу ли я получить от Spring информацию о том, в каких путях к классам она просматривается?

#java #spring #classpath

#java #spring #classpath

Вопрос:

У нас есть эта строка в нашем Spring applicationContext.xml :

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

Но это не поиск и замена определенного значения свойства, которым, по нашему мнению, оно должно быть. Есть ли у нас какой-либо способ заставить это конкретное свойство-заполнитель указывать нам пути, по которым он просматривает, файлы, которые он просматривает, и свойства, которые он видит?

Ответ №1:

Вы можете создать подкласс 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> только в целях отладки)

Ответ №2:

вы могли бы подключить исходные тексты spring Framework в свой проект и, используя отладку, вы могли бы видеть, какие файлы свойств найдены / прочитаны. Я думаю, что это проблема конфигурации / упаковки / развертывания проекта. попробуйте создать копию вашего файла свойств, скажем, my.properties и поместить в один из пакетов и посмотреть, работает ли он. Если это работает, то вам нужно повторно настроить пути к классам.

Ответ №3:

Я так не думаю, но вы можете получить текущий путь к классу, вызвав System.getProperty("java.class.path")