Если я создаю источник данных Spring, нужно ли мне определять источник данных внутри Tomcat context.xml? - PullRequest
2 голосов
/ 09 мая 2011

в настоящее время у нас есть приложение, которое настроено с использованием источника данных в файле Tomcat context.xml. Таким образом, мы можем успешно получить соединение, получая имя JNDI и получая соединение. Мне было интересно, можем ли мы заменить это, используя источник данных Spring, и нужна ли нам информация внутри файла context.xml?

Пример 'context.xml':

<?xml version="1.0" encoding="UTF-8"?>
<Context>
    <Resource
        name="jdbc/myDataSource"
        auth="Container"
        type="javax.sql.DataSource"
        username="john"
        password="doe"
        driverClassName="<removed>"
        url="<removed>"
        maxActive="30"
        maxIdle="10"
        maxWait="1000"
        removeAbandonedTimeout="60"
        removeAbandoned="true"
        logAbandoned="true"/>
</Context>

Итак, в нашем коде мы ищем контекст JNDI, подобный этому:

Context envCtx = (Context) initCtx.lookup(..);
DataSource ds = (DataSource) envCtx.lookup(..);
Connection connection = ds.getConnection();

Мне было интересно, могли бы мы лучше определить источник данных Spring вместо использования этого подхода и как мы могли бы это сделать?

Ответы [ 3 ]

6 голосов
/ 09 мая 2011

Я предполагаю, что ваш dataSource теперь настроен примерно так:

<jee:jndi-lookup id="dataSource" jndi-name="jdbc/MyDataSource"/>

Если вы замените его на что-то вроде этого:

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://${jdbc.hostname}/${jdbc.schema}"/>
    <property name="username" value="${jdbc.username}"/>
    <property name="password" value="${jdbc.password}"/>
</bean>

DataSource конфигурация в Tomcat больше не требуется .

В первом случае пул соединений управляется и предоставляется Tomcat с использованием собственной реализации.Последняя конфигурация (которую я настоятельно рекомендую из-за переносимости и сокращения зависимостей от контейнера) не зависит от Tomcat.Вместо этого Spring создает свой собственный пул соединений (обратите внимание, что реализация пула происходит из внешней библиотеки, такой как DBCP или C3P0), и нет абсолютно никакой ссылки на ссылку JNDI Tomcat.

1 голос
/ 18 апреля 2014

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

1 голос
/ 13 марта 2013

Возможно, на этот вопрос уже ответил Томаш Нуркевич, но я хотел бы кое-что отметить в отношении пула соединений commons-dbcp и tomcat jdbc: последний имеет несколько преимуществ по сравнению с переносным и более универсальным commons-dbcp, одним из самых Важные из них: пул соединений Tomcat может быть намного быстрее и предотвратить голодание. Вот еще информация, которую можно прочитать перед принятием решения: http://people.apache.org/~fhanik/jdbc-pool/jdbc-pool.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...