DBCP, как это ни удивительно звучит, ещё одна библиотека для создания пулов соединений. Вместе с HikariCP и c3p0 они составляют триумвират наиболее популярных библиотек пулов для java. DBCP разрабатывается The Apache Foundation, что сделало его некоторым образом тяжёловесным.
Простое создание пула соединений
1
2
3
4
5
|
BasicDataSource ds = new BasicDataSource();
ds.setDriverClassName("org.postgresql.Driver");
ds.setUrl("jdbc:postgresql://127.0.0.1/test");
ds.setUsername("test");
ds.setPassword("test");
|
Детальная настройка пула соединений
1
2
3
4
5
6
7
8
9
10
11
12
|
DriverManagerConnectionFactory connectionFactory =
new DriverManagerConnectionFactory(
"jdbc:postgresql://127.0.0.1/test",
"test",
"test");
PoolableConnectionFactory poolableConnectionFactory =
new PoolableConnectionFactory(connectionFactory, null);
ObjectPool<PoolableConnection> connectionPool =
new GenericObjectPool<>(poolableConnectionFactory);
poolableConnectionFactory.setPool(connectionPool);
PoolingDataSource<PoolableConnection> ds =
new PoolingDataSource<>(connectionPool);
|
Создание пула начинается с фабрики соединений с базой, которая настраивается с помощью jdbc url и имени и пароля для входа в базу. Из этой, пока ещё обычной фабрики, создают фабрику соединений, поддерживающую пулы. Далее создаётся пул объектов, который настраивается фабрикой соединений, поддерживающей пулы. Этот пул объектов будет обращаться к фабрике, когда ему потребуется новое соединение. Одновременно фабрика хочет знать, кто же управляет её продукцией, поэтому ей передают созданный объект пула. Наконец создаётся DataSource из пула, который уже можно использовать как обычно.
DBCP и Spring
Использование DBCP в Spring даже вынесено в документацию по Spring, поэтому я не буду сильно отклоняться от неё:
1
2
3
4
5
6
|
<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="org.postgresql.Driver" />
<property name="url" value="jdbc:postgresql://127.0.0.1/test" />
<property name="username" value="test" />
<property name="password" value="test" />
</bean>
|
Код примера доступен на github. Для запуска примера требуется установить PostgreSQL сервер и разрешить к нему доступ. Если сервер будет установлен не на локальной машине, требуется изменить его адрес в коде.