1. Обзор
Oracle — одна из самых популярных баз данных в крупных производственных средах. Поэтому разработчикам Spring очень часто приходится работать с этими базами данных.
В этом уроке мы поговорим о том, как мы можем сделать эту интеграцию.
2. База данных
Первое, что нам нужно, это, конечно же, база данных. Если у нас ее нет, мы можем получить и установить любую из баз данных, доступных на странице загрузки программного обеспечения для баз данных Oracle . Но если мы не хотим выполнять какую-либо установку, мы также можем собрать любой образ базы данных Oracle для Docker .
В этом случае мы собираемся использовать образ Docker Oracle Database 12c Release 2 (12.2.0.2)
Standard Edition . Следовательно, это избавляет нас от необходимости устанавливать новое программное обеспечение на наш компьютер.
3. Объединение соединений
Теперь у нас есть база данных, готовая для входящих подключений. Далее давайте изучим несколько различных способов создания пула соединений в Spring.
3.1. HikariCP
Самый простой способ создания пула соединений с помощью Spring — использовать автоконфигурацию. Зависимость spring-boot-starter-jdbc
включает HikariCP в качестве предпочтительного источника данных для пула. Поэтому, если мы заглянем в наш pom.xml
, мы увидим:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
Зависимость 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
Как видите, у нас есть три разных параметра конфигурации раздела:
- В разделе
настроек подключения к OracleDB мы, как всегда, настроили свойства подключения JDBC.
- В
разделе настроек HikariCP
мы настраиваем пул соединений HikariCP. Если нам нужна расширенная конфигурация, мы должны проверить список свойств конфигурации HikariCP. - Раздел
настроек JPA
представляет собой некоторую базовую конфигурацию для использования 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.*
для конфигурации HikariCPspring.datasource.tomcat.*
для конфигурации пула Tomcatspring.datasource.dbcp2.*
для конфигурации Commons DBC2
И, собственно, мы можем установить весну.
datasource.type
для любой другой реализации DataSource
. Не обязательно быть одним из трех упомянутых выше.
Но в этом случае у нас будет просто базовая готовая конфигурация. Будет много случаев, когда нам потребуются некоторые расширенные конфигурации. Давайте посмотрим на некоторые из них.
3.3. Универсальный пул соединений Oracle
Если мы хотим использовать расширенные конфигурации, мы можем объявить источник данных UCP и установить остальные свойства в файле application.properties. Начиная с версии 21.1.0.0 UCP, это самый простой способ сделать это.
Универсальный пул соединений Oracle (UCP) для JDBC обеспечивает полнофункциональную реализацию для кэширования соединений JDBC. Он повторно использует соединения вместо создания новых. Это также дает нам набор свойств для настройки поведения пула.
Если мы хотим использовать UCP, нам нужно добавить следующие зависимости Maven:
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc8</artifactId>
</dependency>
<dependency>
<groupId>com.oracle.database.ha</groupId>
<artifactId>ons</artifactId>
</dependency>
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ucp</artifactId>
</dependency>
Теперь нам нужно только добавить нашу конфигурацию в файл application.properties :
# UCP settings
spring.datasource.type=oracle.oracleucp.jdbc.UCPDataSource
spring.datasource.oracleucp.connection-factory-class-name=oracle.jdbc.pool.OracleDataSource
spring.datasource.oracleucp.sql-for-validate-connection=select * from dual
spring.datasource.oracleucp.connection-pool-name=UcpPoolBooks
spring.datasource.oracleucp.initial-pool-size=5
spring.datasource.oracleucp.min-pool-size=5
spring.datasource.oracleucp.max-pool-size=10
В приведенном выше примере мы настроили некоторые свойства пула:
spring.datasource.oracleucp.initial-pool-size
указывает количество доступных подключений, созданных после запуска пула.spring.datasource.oracleucp.min-pool-size
указывает минимальное количество доступных и заимствованных соединений, которые поддерживает наш пул, иspring.datasource.oracleucp.max-pool-size
указывает максимальное количество доступных и заимствованных соединений, которые поддерживает наш пул.
Если нам нужно добавить дополнительные свойства конфигурации, мы должны проверить UCPDataSource
JavaDoc или руководство разработчика .
4. Старые версии Oracle
Для версий до 11.2, таких как Oracle 9i или 10g , мы должны создать OracleDataSource
вместо использования Oracle Universal Connection Pooling.
В нашем экземпляре 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 .