Как загрузить ${catalina.home}/conf/application.properties в Spring/Tomcat webapp? - программирование

Как загрузить ${catalina.home}/conf/application.properties в Spring/Tomcat webapp?

Как загрузить ${catalina.home}/conf/application.properties в Spring/Tomcat webapp?

Оглядываясь на StackOverflow и Google, я вижу много дискуссий, которые утверждают, что это возможно. Однако это просто не работает для меня. В соответствии с рекомендациями моего исследования мой файл Spring applicationContext.xml содержит следующую строку:

<context:property-placeholder location="${catalina.home}/conf/application.properties"/>

Но я получаю это в журналах:

Caused by: java.io.FileNotFoundException: Could not open ServletContext resource [/Users/username/Servers/apache-tomcat-6.0.36/conf/application.properties]

Из записи журнала я вижу, что ${catalina.home} расширяется правильно. Когда я разворачиваю его вручную в файле applicationContext.xml, он возвращает ту же ошибку. Следующее возвращает содержимое файла application.properties как ожидалось:

cat /Users/username/Servers/apache-tomcat-6.0.36/conf/application.properties

Итак, путь явно правильный. Является ли это проблемой безопасности webapp или проблемы с конфигурацией сервера Tomcat?

4b9b3361

Ответ 1

location context:property-placeholder - это ресурс, что означает, что если вы укажете только путь к файлу (в отличие от полного URL-адреса с протоколом), то путь будет разрешен в отношении базового каталога веб-приложения - он пытается загрузить /Users/username/Servers/apache-tomcat-6.0.36/webapps/<appname>/Users/username/Servers/apache-tomcat-6.0.36/conf/application.properties, которого не существует. Если вы префикс его file:, он будет работать так, как вам нужно:

<context:property-placeholder location="file:${catalina.home}/conf/application.properties"/>

Ответ 2

Для настройки на основе аннотаций вы можете использовать:

@PropertySource("file:${catalina.home}/conf/application.properties")