Рубрики
Без рубрики

Объединение Пулов Соединений Oracle С Spring

Узнайте, как настроить пул подключений к базе данных Oracle с данными Spring

Автор оригинала: baeldung.

1. Обзор

Oracle-одна из самых популярных баз данных в больших производственных средах. Поэтому, как разработчики Spring, очень часто приходится работать с этими базами данных.

В этом уроке мы поговорим о том, как мы можем сделать эту интеграцию.

2. База Данных

Первое, что нам нужно, это, конечно, база данных. Если у нас его нет, мы можем получить и установить любую из баз данных, доступных в Oracle Database Software Downloads . Но в случае, если мы не хотим выполнять какую-либо установку, мы также можем создать любой из образов базы данных Oracle для Docker .

В этом случае мы будем использовать Oracle Database 12c Release 2 (12.2.0.2) Standard Edition Docker image . Следовательно, это избавляет нас от необходимости устанавливать новое программное обеспечение на ваш компьютер.

3. Объединение пулов Соединений

Теперь у нас есть база данных, готовая для входящих подключений. Затем давайте изучим несколько различных способов объединения соединений весной.

3.1. ХикариКП

Самый простой способ объединения пулов соединений с Spring-это использование автоматической настройки. Зависимость spring-boot-starter-jdbc включает в себя HikariCP в качестве предпочтительного источника данных для объединения. Поэтому, если мы заглянем в наш pom.xml посмотрим:


    org.springframework.boot
    spring-boot-starter-data-jpa

Зависимость spring-boot-starter-data-jpa включает в себя зависимость spring-boot-starter-jdbc транзитивно для нас.

Теперь нам нужно только добавить нашу конфигурацию в файл application.properties :

# OracleDB connection settings
spring.datasource.url=jdbc:oracle:thin:@//localhost:11521/ORCLPDB1
spring.datasource.username=books
spring.datasource.password=books
spring.datasource.driver-class-name=oracle.jdbc.OracleDriver

# HikariCP settings
spring.datasource.hikari.minimumIdle=5
spring.datasource.hikari.maximumPoolSize=20
spring.datasource.hikari.idleTimeout=30000
spring.datasource.hikari.maxLifetime=2000000
spring.datasource.hikari.connectionTimeout=30000
spring.datasource.hikari.poolName=HikariPoolBooks

# JPA settings
spring.jpa.database-platform=org.hibernate.dialect.Oracle12cDialect
spring.jpa.hibernate.use-new-id-generator-mappings=false
spring.jpa.hibernate.ddl-auto=create

Как вы можете видеть, у нас есть три различных параметра конфигурации раздела:

  • В разделе Oracle DB connection settings мы, как всегда, настроили свойства подключения JDBC
  • В В разделе Настройки HikariCP мы настраиваем пул соединений HikariCP. В случае, если нам нужна расширенная конфигурация, мы должны проверить список свойств конфигурации HikariCP
  • Раздел JPA settings представляет собой некоторую базовую конфигурацию для использования Hibernate

Это все, что нам нужно. Это не может быть проще, не так ли?

3.2. Пул соединений Tomcat и Commons DBCP2

Spring рекомендует HikariCP для его производительности . С другой стороны, он также поддерживает Tomcat и Commons DBCP2 в приложениях автоматической настройки Spring Boot.

Он пытается использовать HikariCP. Если он недоступен, то пытается использовать пул Tomcat. Если ни один из них не доступен, он пытается использовать Commons DBCP2.

Мы также можем указать пул соединений для использования. В этом случае нам просто нужно добавить новое свойство в наш файл application.properties :

spring.datasource.type=org.apache.tomcat.jdbc.pool.DataSource

Если нам нужно настроить определенные параметры, у нас есть доступные их префиксы:

  • spring.datasource.hikari.* для конфигурации HikariCP
  • spring.datasource.tomcat.* для конфигурации пула Tomcat
  • spring.datasource.dbcp2.* для общей конфигурации sDBC2

И, собственно, мы можем установить пружину. источник данных.введите в любую другую источник данных реализацию. Не обязательно быть кем-то из трех упомянутых выше.

Но в этом случае у нас будет только базовая готовая конфигурация. Будет много случаев, когда нам понадобятся некоторые расширенные конфигурации. Давайте посмотрим на некоторые из них.

3.3. Пул универсальных подключений Oracle

Если мы хотим использовать расширенные конфигурации, нам нужно явно определить Источник данных компонент и задать свойства. Вероятно, самый простой способ сделать это-использовать аннотации @Configuration и @Bean .

Oracle Universal Connection Pool (UCP) для JDBC предоставляет полнофункциональную реализацию для кэширования соединений JDBC. Он повторно использует соединения вместо создания новых. Он также предоставляет нам набор свойств для настройки поведения пула.

Если мы хотим использовать UCP, нам нужно добавить следующие зависимости Maven:


    com.oracle.database.jdbc
    ojdbc8


    com.oracle.database.ha
    ons


    com.oracle.database.jdbc
    ucp

Теперь мы готовы объявить и настроить пул подключений UCP:

@Configuration
@Profile("oracle-ucp")
public class OracleUCPConfiguration {

    @Bean
    public DataSource dataSource() throws SQLException {
        PoolDataSource dataSource = PoolDataSourceFactory.getPoolDataSource();
        dataSource.setUser("books");
        dataSource.setPassword("books");
        dataSource.setConnectionFactoryClassName("oracle.jdbc.pool.OracleDataSource");
        dataSource.setURL("jdbc:oracle:thin:@//localhost:11521/ORCLPDB1");
        dataSource.setFastConnectionFailoverEnabled(true);
        dataSource.setInitialPoolSize(5);
        dataSource.setMinPoolSize(5);
        dataSource.setMaxPoolSize(10);
        return dataSource;
    }
}

В приведенном выше примере мы настроили некоторые свойства пула:

  • setInitialPoolSize указывает количество доступных подключений, созданных после запуска пула
  • setMinPoolSize указывает минимальное количество доступных и заимствованных подключений, которые поддерживает наш пул, и
  • setMaxPoolSize указывает максимальное количество доступных и заимствованных подключений, которые поддерживает наш пул

Если нам нужно добавить дополнительные свойства конфигурации, мы должны проверить Источник данных пула JavaDoc или руководство разработчика .

4. Более старые версии Oracle

Для версий до 11.2, таких как Oracle 9i или 10g , мы должны создать OracleDataSource вместо использования Универсального пула соединений Oracle.

В нашем экземпляре OracleDataSource мы включаем кэширование соединений через setConnectionCachingEnabled :

@Configuration
@Profile("oracle")
public class OracleConfiguration {
    @Bean
    public DataSource dataSource() throws SQLException {
        OracleDataSource dataSource = new OracleDataSource();
        dataSource.setUser("books");
        dataSource.setPassword("books");
        dataSource.setURL("jdbc:oracle:thin:@//localhost:11521/ORCLPDB1");
        dataSource.setFastConnectionFailoverEnabled(true);
        dataSource.setImplicitCachingEnabled(true);
        dataSource.setConnectionCachingEnabled(true);
        return dataSource;
    }
}

В приведенном выше примере мы создавали OracleDataSource для пула соединений и настроили некоторые параметры. Мы можем проверить все настраиваемые параметры на OracleDataSource JavaDoc .

5. Заключение

В настоящее время настройка пула подключений к базе данных Oracle с использованием Spring-это просто кусок пирога.

Мы видели, как это сделать, просто используя автоматическую настройку и программно. Несмотря на то, что Spring рекомендует использовать HikariCP, доступны и другие варианты. Мы должны быть осторожны и выбрать правильную реализацию для наших текущих потребностей.

И, как всегда, полный пример можно найти на GitHub .