Статьи

Настройка пула подключений к базе данных Spring JDBC

Настроить пул соединений с базой данных JDBC в среде Spring легко для любого приложения Java, просто изменив несколько настроек в файле конфигурации Spring. Если вы пишете основное приложение Java и не работаете на каком-либо веб-сервере или сервере приложений, таком как Tomcat или Weblogic, Managing Database Пул соединений с использованием Apache Commons DBCP и Commons Pool вместе со средой Spring — хороший выбор, но если вы можете позволить себе роскошь иметь веб-сервер и управляемый J2EE-контейнер, рассмотрите возможность использования пула соединений, управляемого J2EE-сервером, это лучший вариант с точки зрения обслуживания, гибкости и также помогает предотвратить java.lang.OutofMemroyError: пространство PermGen в tomcat , избегая загрузки драйвера JDBC в загрузчик классов веб-приложения. Кроме того, хранение информации о пуле соединений JDBC на сервере упрощает изменение или включение настроек JDBC через SSL. В этой статье мы увидим, как настроить пул соединений с базой данных в среде Spring с использованием Apache commons DBCP и commons pool.jar.

Эта статья является продолжением моих руководств по Spring Framework и базам данных, таким как Аутентификация LDAP в J2EE с Spring Security и управление сеансами с использованием безопасности Spring. Если вы не читали эту статью, вы можете найти их полезными.

Пример Spring JDBC Пул соединений с базой данных

Spring Framework предоставляет удобный класс JdbcTemplate для выполнения всех операций, связанных с базой данных. если вы не используете Hibernate, то лучше использовать Spring JdbcTemplate. JdbcTemplate требует DataSource, который является реализацией javax.sql.DataSource, и вы можете получить его напрямую, используя конфигурацию Spring Bean или JNDI, если вы используете веб-сервер J2EE или сервер приложений для управления пулом соединений. Дополнительные сведения см. В разделе Как настроить пул соединений JDBC в tomcat и Spring для пулов соединений на основе JNDI. Для настройки источника данных вам потребуется следующая конфигурация в вашем файле applicationContext.xml (весенняя конфигурация):

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
//Datasource connection settings in Spring
<bean id="springDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" >
  <property name="url" value="jdbc:oracle:thin:@localhost:1521:SPRING_TEST" />
  <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
  <property name="username" value="root" />
  <property name="password" value="root" />
  <property name="removeAbandoned" value="true" />
  <property name="initialSize" value="20" />
  <property name="maxActive" value="30" />
</bean>
 
//Dao class configuration in spring
<bean id="EmployeeDatabaseBean" class="com.test.EmployeeDAOImpl">
   <property name="dataSource" ref="springDataSource"/>
</bean>      
Ниже конфигурация пула соединений DBCP создаст 20 соединений с базой данных, так как initialSize равно 20 и идет до 30 соединений с базой данных, если maxActive равно 30. Вы можете настроить пул соединений с базой данных, используя различные свойства, предоставляемые библиотекой Apache DBCP. Выше приведен пример создания пула соединений с базой данных Oracle 11g, и мы используем oracle.jdbc.driver.OracleDriver поставляется вместе с ojdbc6.jar или ojdbc6_g.jar, чтобы узнать больше о том, как подключить базу данных Oracle из программы Java, см. Ссылку.

Java-код для использования пула подключений в Spring

Ниже приведен полный пример кода класса DAO, который использует Spring JdbcTemplate для выполнения запроса SELECT к базе данных с использованием соединения с базой данных из пула соединений. Если вы не инициализируете пул соединений с базой данных при запуске, это может занять некоторое время при выполнении первого запроса, поскольку ему нужно создать определенное количество соединений SQL, а затем выполнить запрос, но после создания пула соединений последующие запросы будут выполняться быстрее ,
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
//Code for DAO Class using Spring JdbcTemplate
package com.test
import javax.sql.DataSource;
import org.log4j.Logger;
import org.log4j.LoggerFactory;
import org.springframework.jdbc.core.JdbcTemplate;
 
/**
 * Java Program example to use DBCP connection pool with Spring framework
 * @author Javin Paul
 */
public class EmployeeDAOImpl implements EmployeeDAO {
 
    private Logger logger = LoggerFactory.getLogger(EmployeeDAOImpl.class);
    private JdbcTemplate jdbcTemplate;
 
    public void setDataSource(DataSource dataSource) {
        this.jdbcTemplate = new JdbcTemplate(dataSource);
    }
 
    @Override
    public boolean isEmployeeExists(String emp_id) {
        try {
            logger.debug("Checking Employee in EMP table using Spring Jdbc Template");
            int number = this.jdbcTemplate.queryForInt("select count(*) from EMP where emp_id=?", emp_id);
            if (number > 0) {
                return true;
            }
        } catch (Exception exception) {
            exception.printStackTrace();
        }
        return false;
    }
}
Зависимость:
1. вам нужно включить jar драйвера оракула как ojdbc_6.jar в ваш classpath.
2. Apache DBCP и jar пула общих ресурсов в пути к классам приложений.
Это все о том, как настроить пул соединений с базой данных JDBC в среде Spring . Как я уже сказал, использовать библиотеку Apache DBCP довольно просто. Просто несколько настроек весной applicationContext.xml, и вы готовы. Если вы хотите настроить пул соединений JDBC на tomcat (пул соединений JNDI) и хотите использовать его весной, см. Здесь.