2014-11-06 8 views
5

Так что это должна быть какая-то глупая ошибка, с которой я не смог пройти. Я пытаюсь выполнить экстернализацию моего файла свойств, который теперь помещен в мой пользовательский дом. Я загружаю файл свойств с помощью @PropertySource так:Spring PropertyPlaceHolder Java Config внешний файл свойств

@Configuration 
@PropertySources(value = { @PropertySource("file:#{systemProperties['user.home']}/.invoice/config.properties") }) 
public class PropertiesConfig { 

    @Bean 
    public static PropertySourcesPlaceholderConfigurer propertiesPlaceHolderConfigurer() { 
     return new PropertySourcesPlaceholderConfigurer(); 
    } 
} 

Но, к сожалению, это не загружает файл свойств. Броски FileNotFoundException. Но если я изменю путь к:

@PropertySources(value = { @PropertySource("file:/home/rohit/.invoice/config.properties") }) 

он работает правильно. И это путь, к которому разрешается предыдущий путь. Я зарегистрировал его для проверки. Поэтому мне кажется, что SpEL не оценивается в аннотации @PropertySource. Должно ли это работать так?

Если да, то есть ли другой способ прочитать файл внешних свойств, который находится в /home/rohit? Я не хочу давать абсолютный путь по очевидным причинам. И я бы хотел избежать расширения класса PropertyPlaceHolderConfigurer.

Еще одна опция, которую я пробовал, заключалась в добавлении папки /home/rohit/.invoice в путь к tomcat. Но похоже, что Spring не использует System Classpath для разрешения суффикса classpath:. Любые указатели на это?

+1

Выражение не будет работать вместо 'file: $ {user.home} /. Invoice/config.properties'. –

+0

@ M.Deinum Позвольте мне попробовать это .. –

+0

@ M.Deinum Ahaa !! Это сработало :) Отправляй это в ответ, так что я могу его принять :) –

ответ

3

В выражениях выражения @PropertySoure EL не работают. Вы можете использовать заполнители ${...}, но это также ограничено переменными системы или среды. Однако, поскольку вы хотите разрешить домашний каталог пользователя, вы можете использовать заполнитель ${user.home}.

@PropertySource("file:${user.home}/.invoice/config.properties") 

Это должно работать по своему желанию.