Веб-приложение Tomcat 6 с развертыванием источника данных - PullRequest
6 голосов
/ 10 января 2011

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

Рекомендуется использовать META-INF / context.xml для указания контекста Tomcat, но я не понимаю, как мне указать источник данных в context.xml :

  1. небезопасно помещать пароль базы данных в context.xml , который могут просматривать все;

  2. как мне поддерживать два разных источника данных для режима производства и разработки?

Как вы решаете эту проблему?

Ответы [ 3 ]

5 голосов
/ 10 января 2011

Я не понимаю, как мне указать источник данных в context.xml:

Итак:

<?xml version="1.0" encoding="UTF-8"?>

<Context>
    <Resource
        type="javax.sql.DataSource"
        name="jdbc/dbname" 
        driverClassName="com.mysql.jdbc.Driver"
        url="jdbc:mysql://localhost:3306/dbname"
        username="java" 
        password="d$7hF_r!9Y"
        maxActive="100" maxIdle="30" maxWait="10000" 
    />
</Context>

И в web.xml:

<resource-env-ref>
    <resource-env-ref-name>jdbc/dbname<resource-env-ref-name>
    <resource-env-ref-type>javax.sql.DataSource</resource-env-ref-type>
</resource-env-ref>

См. Также:


1: небезопасно помещать пароль базы данных в context.xml, который могут просматривать все;

Он не доступен для просмотра веб-пользователями.Его могут просматривать только те serveradmins, которым все равно нужно знать о них.


2: как мне поддерживать два разных источника данных для режима производства и разработки?

Определите два отдельных <Resource>, каждое из которых имеет свое имя, и переключите режим dev / prod с помощью какого-либо параметра в web.xml или файле свойств, чтобы вы могли динамически получать один или другой источник данных.Например,

<context-param>
    <param-name>dev</param-name>
    <param-value>true</param-value>
</context-param>

с

boolean dev = Boolean.valueOf(getServletContext().getInitParameter("dev"));

if (dev) {
    dataSource = getDataSource("jdbc/devdb");
} else {
    dataSource = getDataSource("jdbc/proddb");
}
1 голос
/ 21 июня 2013

Извините, В поисках кода для копирования и вставки я нашел этот вопрос и ответ. BalusC - правильный ответ и должен быть помечен как ответ, но я не совсем согласен с пунктом 2

2: как мне поддерживать два разных источника данных для режима производства и разработки?

Вам не нужно определять разные контекстные параметры или разные источники данных. Давайте рассмотрим:

  1. База данных - имеет различные базы данных / схемы, и вам нужны конкретные пользователи и пароли для каждой базы данных.
  2. Сервер приложений / веб-контейнер - будет иметь источник данных для привязки баз данных.
  3. Приложение - относится к источнику данных.

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

0 голосов
/ 10 января 2011

Размещение информации о соединении в документе context.xml безопасно до такой степени, что оно недоступно для клиента, посещающего ваше приложение, поэтому эта информация может храниться в безопасности. Другой метод аутентификации был бы полезен для тех из нас, кому не нравится видеть эти пароли в виде простого текста на сервере.

Различные источники данных, по моему мнению, лучше всего решаются путем внедрения зависимостей. Использование такой среды, как Spring, позволяет указать, какие ресурсы вы используете в конфигурации, а не код.

...