Где разместить настройки для всего приложения в Java (Servlet)? - PullRequest
2 голосов
/ 17 февраля 2011

В ASP.NET есть web.config, который может содержать настройки всего приложения. Существует ли соответствующий файл (находящийся вне архива war или jar) для сервлета Java EE?

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

Есть намеки? Я пробовал Google, но нашел очень мало подходящего - и то, что я нашел, оказалось ужасно перегруженным для моих нужд.

Ответы [ 3 ]

6 голосов
/ 17 февраля 2011

В ASP.NET есть web.config, который может содержать настройки для всего приложения. Существует ли соответствующий файл (находящийся вне архива войны или jar-файла) для сервлета Java EE?

Это web.xml. Вы можете определить настройки как <context-param> записей.

<context-param>
    <param-name>foo</param-name>
    <param-value>bar</param-value>
</context-param>

Доступно по ServletContext#getInitParameter(). ServletContext в свою очередь доступен везде.

String foo = getServletContext().getInitParameter("foo"); // Contains "bar"

Вы также можете получить к нему доступ по EL.

#{initParam.foo} <!-- prints "bar" -->

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

В соответствии с акцентом, я бы использовал файл properties для этой конкретной цели, который затем помещался бы в путь вне WAR. Вам просто нужно добавить этот путь в путь к классам выполнения Java. Затем вы можете получить его как ресурс classpath:

Properties properties = new Properties();
properties.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("filename.properties"));
// ...

Однако, с единственной целью обслуживания соединения с БД, вам действительно лучше использовать источник данных, управляемый сервлет-контейнером, как ответил Qwerky. Все, что вам, возможно, потребуется настроить, это просто имя источника данных.

3 голосов
/ 17 февраля 2011

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

99% серьезных веб-приложений делают это, остальные 1% должны.

1 голос
/ 17 февраля 2011

Ваше приложение может загрузить произвольный внешний файл, просто передав путь в качестве параметра командной строки (в скрипт запуска контейнера сервлета). Затем сохраните значения в ServletContext

...