Файлы конфигурации для упакованных приложений WAR - PullRequest
2 голосов
/ 25 февраля 2012

Когда вы разрабатываете веб-приложение на языке сценариев, у вас есть файл в дереве каталогов вашего проекта, где конфигурации определяются во время развертывания и считываются для инициализации во время выполнения.Ситуация существенно меняется при развертывании вашего веб-приложения в виде скомпилированного файла WAR, поскольку у вас нет доступа ни к какому-либо дереву каталогов, так и к редактированию содержимого архива.

Это мой сценарий: моему приложению требуется smtp.properties дляотправка электронных писем во время выполнения, поэтому этот файл содержит конфиденциальную информацию, которой я не хочу делиться с другими веб-приложениями.Это означает, что я не буду помещать файл в $CLASSPATH.Другой вариант - проверка в известном месте, но это имеет очевидные проблемы с переносимостью.Просто назову одно: в Linux у вас есть /etc, в Windows нет /etc

В настоящее время я читаю настройки с ServletContext.getInitParameter(String), но это накладывает ограничение наФормат данных и фактическое место файла зависят от контейнера сервлета.

Итак, мой окончательный ответ: что ближе всего соответствует config.php (или config.yml) на земле JavaEE?

Отказ от ответственности : Я прочитал много похожих вопросов, и кажется, что короткий ответ - это никак.Это также обременительно, если вы хотите переопределить параметры для других компонентов во время развертывания (например, ведение журнала)

Ответы [ 2 ]

1 голос
/ 25 февраля 2012

В мире Java EE путь идет по JNDI. Внутри вашего веб-приложения вы можете прочитать параметры конфигурации через стандартизированный JNDI API. Это включает в себя что-то вроде учетных данных для входа по SMTP, а также, например, настроенных соединений с базой данных.

Подробнее читайте в моем ответе на похожий вопрос: Как переносить чтение данных конфигурации из сервлета

0 голосов
/ 25 февраля 2012

В Java эквивалентом файла config.php является файл web.xml в WEB-INF. Я не вижу проблемы с the actual file's place depends on the servlet container, вы никогда не указываете путь для чтения параметров внутри, нет?

Кстати, если вы хотите создать свой собственный файл свойств в войне, вы можете получить к нему доступ, используя:

URL propPath = getClass().getResource("your_relative_path");
...