#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")