Для доступа к данным в JDBC необходима реализация интерфейса javax.sql.DataSource - таких реализаций может быть много - в том числе и таких, которые на каждую операцию с БД открывают новое соединение - это очень затратно и медленно - мы их сразу опустим и рассмотрим пул как рабочую схему. Существует много реализаций пула:
- Apache commons dbcp2 (dbcp = database connection pool);
- HikariCP;
а также c3p0, BoneCP, Vibur и много других - настраиваются они все идентично и мы рассмотрим Apache.
Пул постоянно поддерживает несколько готовых соединений с базой - для текущей операции с базой практически мгновенно предоставляется готовое соединение из пула - а затем когда операция будет отработана это соединение менеджер пула помечает как свободное и возвращает в пул - в результате почти не тратится время на создание нового соединения если сравнивать с обычным подходом - это очень краткое и упрощенное описание работы пула.
Необходимо будет добавить зависимость в maven:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId>
<version>2.4.0</version>
</dependency>
в свою очередь эта зависимость "зацепит" и другую - commons-pool2. Будем использовать БД Derby в embedded-mode.
В файл конфигурации приложения Spring надо будет добавить бин, реализующий интерфейс javax.sql.DataSource с помощью класса BasicDataSource из apache commons dbcp2:
@Bean(destroyMethod = "close")
public DataSource dataSource() {
BasicDataSource bds = new BasicDataSource();
bds.setDriverClassName("org.apache.derby.jdbc.EmbeddedDriver");
bds.setUrl("jdbc:derby:./db/primer");
bds.setPassword("12345");
bds.setUsername("romka");
return bds;
}
Вот и все пока - а дальше мы покажем как его использовать.
Да чуть не забыл -
вот пример с исходниками