четверг, 21 июня 2018 г.

Spring - интерфейс DataSource и JDBC пул соединений

Для доступа к данным в 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;
    }
Вот и все пока - а дальше мы покажем как его использовать.
Да чуть не забыл - вот пример с исходниками

Комментариев нет:

Отправить комментарий

Взаимодействие между приложениями и Watch Service

Взаимодействие между разными приложениями Java можно сделать с помощью файловой системы, базы данных и JMS. Рассмотрим случай ФС - в Java ...