Каков наилучший способ развертывания конфигурации базы данных (имя пользователя / пароль) с веб-приложением Java (web.xml)? - PullRequest
2 голосов
/ 21 сентября 2010

У меня есть веб-приложение на Java, использующее стандартный web.xml и сервлеты. На данный момент я использую теги <context-param> в web.xml для определения конфигурации базы данных (URL JDBC, имя пользователя, пароль и т. Д.). Они подобраны сервлетом по методу init().

Но я бы не хотел включать имя пользователя / пароль базы данных в мой исходный репозиторий.

Для тестирования я использую jetty-maven-plugin. При этом я указываю параметр overrideDescriptor с дополнительным web.xml, который применяется после основного web.xml. Я поместил свою тестовую конфигурацию базы данных в этот дополнительный файл, и все отлично работает.

Для развертывания мой хост использует Tomcat. Я не уверен, как применить конфигурацию базы данных здесь. Есть ли аналогичный способ указать дополнительный файл web.xml? Если нет, то как лучше всего это делать? Прочитать конфигурацию из отдельного файла свойств (или аналогичного), включенного в качестве ресурса?

Ответы [ 4 ]

8 голосов
/ 21 сентября 2010

Вы должны использовать пулы соединений и JNDI.Таким образом вы сохраняете учетные данные на сервере.Пользователям нужно только имя поиска JNDI (например, «jdbc / FooDataSource») для доступа к пулу соединений.

1 голос
/ 21 сентября 2010

"Считать конфигурацию из отдельного файла свойств (или аналогичного), включенного в качестве ресурса?"

Да.

Существует также много способов сделать ЭТО.Мой текущий проект использует PropertyPlaceholderConfigurer Spring для чтения соответствующих файлов свойств и позволяет использовать любое значение в контекстном файле, используя обычную запись ${whatever}.

Добавление:

Кстати, мы используем пользовательский подкласс PropertyPlaceholderConfigurer, чтобы указать расположение файлов.Мы используем «глобальный» файл свойств, который применяется ко всем средам (dev, test, uat, prod), а затем по одному файлу для каждой среды, который переопределяет глобальные настройки.

Сами файлы развернуты в банке, но нам не нужна гибкость изменения значений на лету.

0 голосов
/ 03 января 2013

В вашем application-context.xml вы можете использовать заполнители и указывать расположение параметров заполнителя в файле внешних свойств.

<bean id="propertyConfigurer" 
 class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="location">
       <value>/WEB-INF/database-config.properties</value>
    </property>
</bean>
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="${jdbc.driver}"/>
    <property name="url" value="${jdbc.url}"/>
    <property name="username" value="${jdbc.user}"/>
    <property name="password" value="${jdbc.password}"/>
</bean>

В вашем файле database-config.properties. Вы можете предоставить параметры заполнителя. В этом случае настройки базы данных.

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/school?useUnicode=true&characterEncoding=UTF-8
jdbc.user=root
jdbc.password=root
0 голосов
/ 21 сентября 2010

Вы всегда можете сохранить конфигурацию во внешнем файле .properties, изменить вместо этого свой сервлет для чтения из него (возможно, указав точку web.xml на пути к файлу) и, таким образом, сохранить файл только на сервере ивне контроля источника.

...