Статьи

Как настроить пул соединений с базой данных JNDI в Tomcat — пример учебного пособия по Spring

Настроить пул соединений с базой данных JNDI в Spring и Tomcat довольно просто. Документация сервера Tomcat дает достаточно информации о том, как настроить пул соединений в Tomcat 5, 6 или 7. Здесь мы будем использовать Tomcat 7 вместе со средой Spring для создания пула соединений на сервере Tomcat и доступа к ним в Spring с использованием кода JNDI. В нашей последней статье мы увидели, как настроить пул соединений с базой данных в Spring для основного Java-приложения, которое не работает на веб-сервере или сервере приложений и не имеет управляемого контейнера J2EE. но если вы разрабатываете веб-приложение, лучше использовать более управляемый пул соединений и обращаться к ним с помощью JNDI. Конфигурация Spring будет общей и основана только на имени источника данных JNDI, поэтому она будет работать на любом сервере J2EE, например, Glassfish , WebLogic , JBoss или WebSphere, пока имя JNDI не будет одинаковым.

Кстати, Tomcat — мой любимый веб-сервер, и я часто его использую при разработке, поскольку он интегрирован с такими средами IDE, как Eclipse и Netbeans. Я использую его для всех целей тестирования и разработки, и многие компании даже используют Tomcat в Production для размещения веб-приложений на Java.

Это просто, быстро и очень надежно , хотя будьте осторожны с java.lang.OutOfMemoryError: пространство PermGen в tomcat , которое может вызвать утечку памяти в приложении Java. Обычно это происходит из-за переменных ThreadLocal и драйверов JDBC, но вы наверняка можете избежать этого, зная больше

Как использовать пул соединений с базой данных JNDI в Tomcat и Spring

Существует три шага для настройки и запуска пула соединений источника данных JNDI для любого веб-приложения Java:

1) Настройте источник данных на сервере и создайте имя JNDI.

2) Настройте web.xml

3) Настройте bean-компонент Spring с источником данных JNDI

4) Включите библиотеку драйвера JDBC на сервере lib, например, tomcat / lib

Чтобы создать JNDI DataSource на веб-сервере J2EE, вам необходимо следовать документации по серверу. В Tomcat 6 вы можете просто поместить следующий фрагмент XML в context.xml для создания пула соединений управляемой базы данных Tomcat:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
<<?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" path="/springDataSourceDemo">
<Resource name="jdbc/springeDataSource"
         auth="Container"
         type="javax.sql.DataSource"
         driverClassName="oracle.jdbc.driver.OracleDriver"
         url="jdbc:oracle:thin:@localhost:1521:SPRING_TEST"
         username="root"
         password="root"
         removeAbandoned="true"
         removeAbandonedTimeout="90"
         logAbandoned="true"
         maxActive="20"
         maxIdle="10"
         maxWait="-1"/>
</Context>

Элемент Resource создаст источник данных JNDI, на который можно ссылаться, используя имя JNDI « jdbc/springeDataSource ».

Tomcat внутренне использует DBCP и библиотеку пула Commons для управления пулом соединений с базой данных. Вы можете проверить каталог tomcat/lib наличие файла jar tomcat-dbcp.jar который отвечает за создание пула соединений с базой данных на сервере tomcat.

1. Настройка web.xml для доступа к пулу соединений с базой данных JNDI.

Чтобы получить доступ к любому ресурсу сервера из вашего веб-приложения, вам необходимо указать ресурсы JNDI в файле web.xml.

Вы можете использовать следующий XML для объявления источника данных JNDI в

1
2
3
4
5
6
<resource-ref>
        <description>Oracle Spring JNDI Datasource</description>
        <res-ref-name>jdbc/springDataSource</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
</resource-ref>

Теперь ваше веб-приложение увидит источник данных JNDI, созданный в tomcat с именем jdbc/springDataSource .

2. Конфигурация Spring для доступа к источнику данных JNDI:

Эта весенняя конфигурация достаточно универсальна, и ее можно использовать для доступа к любому источнику данных JNDI, развернутому на любом сервере J2EE или Java EE. Это не связано с Tomcat. org.springframework.jndi.JndiObjectFactoryBean используется для поиска источника данных JNDI и связывания с javax.sql.DataSource .

1
2
3
4
5
<bean id="springDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
  <property name="jndiName" value="java:comp/env/jdbc/springDataSource"/>
  <property name="lookupOnStartup" value="true"/>
  <property name="proxyInterface" value="javax.sql.DataSource"/>
</bean>

Я использовал способ XML для объявления Spring-компонента здесь, но, если вы используете Spring 3.0 или выше, вы также можете использовать конфигурацию Java и аннотацию @Bean для объявления источника данных в приложении Spring.

3. Файл драйвера JDBC в Tomcat Lib

Теперь последний шаг — убедиться, что в tomcat lib есть jar-файл драйвера JDBC . Я обычно помещаю JAR-файл в каталог lib tomcat, но вы можете поместить его в любое место, где это имеет смысл, и модифицируйте tomcat classpath для включения драйвера JAR в classpath.

Теперь остаток кода, который использует этот источник данных, должен оставаться таким же. Вы можете получить исходный код Spring DAO из предыдущей статьи Как настроить пул соединений с базой данных в среде Spring .

PS — Если вы хотите узнать, как разрабатывать RESTful Web Service с использованием Spring MVC, я предлагаю вам присоединиться к REST с сертификационным классом Spring от Eugen Paraschiv. Один из лучших курсов для изучения REST с Spring MVC.

См. Оригинальную статью здесь: Как настроить пул соединений с базой данных JNDI в Tomcat — Spring Tutorial Example

Мнения, высказанные участниками Java Code Geeks, являются их собственными.