Spring을 사용한 Oracle 연결 풀링

1. 개요

Oracle은 대규모 프로덕션 환경에서 가장 널리 사용되는 데이터베이스 중 하나입니다. 따라서 Spring 개발자로서 이러한 데이터베이스로 작업해야하는 것은 매우 일반적입니다.

이 튜토리얼에서는이 통합을 어떻게 할 수 있는지에 대해 이야기 할 것입니다.

2. 데이터베이스

우리에게 가장 먼저 필요한 것은 물론 데이터베이스입니다. 설치되어 있지 않은 경우 Oracle 데이터베이스 소프트웨어 다운로드에서 사용할 수있는 모든 데이터베이스를 가져와 설치할 수 있습니다. 그러나 설치를 원하지 않는 경우 Docker 용 Oracle 데이터베이스 이미지를 빌드 할 수도 있습니다.

이 경우 Oracle Database 12c Release 2 (12.2.0.2) Standard Edition Docker 이미지를 사용합니다. 따라서 컴퓨터에 새 소프트웨어를 설치하지 않아도됩니다.

3. 연결 풀링

이제 들어오는 연결을위한 데이터베이스가 준비되었습니다. 다음으로 Spring에서 커넥션 풀링을 수행하는 몇 가지 다른 방법을 배워 보자.

3.1. HikariCP

Spring과의 연결 풀링을위한 가장 쉬운 방법은 자동 구성을 사용하는 것입니다. 스프링 부팅 스타터 JDBC 의존성 바람직한 풀링 데이터 소스로 HikariCP를 포함한다. 따라서 pom.xml 을 살펴보면 다음을 볼 수 있습니다.

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

스프링 부팅 스타터 데이터 JPA의 의존성은 포함 스프링 부팅 스타터 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 설정 섹션에서는 최대 절전 모드를 사용하기위한 몇 가지 기본 구성입니다

그것이 우리에게 필요한 전부입니다. 이보다 쉬울 수는 없지 않습니까?

3.2. Tomcat 및 Commons DBCP2 연결 풀링

Spring은 성능을 위해 HikariCP를 권장합니다. 반면 Spring Boot 자동 구성 애플리케이션에서 Tomcat 및 Commons DBCP2도 지원합니다.

HikariCP를 사용하려고합니다. 사용할 수없는 경우 Tomcat 풀링을 사용합니다. 둘 다 사용할 수없는 경우 Commons DBCP2를 사용하려고합니다.

사용할 연결 풀을 지정할 수도 있습니다. 이 경우 application.properties 파일에 새 속성을 추가하기 만하면 됩니다.

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

특정 설정을 구성해야하는 경우 해당 접두사를 사용할 수 있습니다.

  • HikariCP 구성을위한 spring.datasource.hikari. *
  • Tomcat 풀링 구성을위한 spring.datasource.tomcat. *
  • Commons DBC2 구성을위한 spring.datasource.dbcp2. *

그리고 실제로 을 설정할 수 있습니다 . datasource.type 을 다른 DataSource 구현에 추가합니다. 위에서 언급 한 세 가지 중 하나 일 필요는 없습니다.

그러나이 경우에는 기본적으로 바로 사용할 수있는 구성 만 있습니다. 몇 가지 고급 구성이 필요한 경우가 많이 있습니다. 그들 중 일부를 보자.

3.3. Oracle 범용 연결 풀링

고급 구성을 사용하려면 DataSource 빈 을 명시 적으로 정의 하고 속성을 설정해야합니다. 아마도 가장 쉬운 방법은 @Configuration@Bean 주석 을 사용하는 것 입니다.

JDBC 용 Oracle UCP (Universal Connection Pool)는 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 는 풀이 유지 관리하는 사용 가능 및 차용 연결의 최대 수를 지정합니다.

더 많은 구성 속성을 추가해야하는 경우 PoolDataSource JavaDoc 또는 개발자 가이드를 확인해야합니다 .

4. 이전 Oracle 버전

For versions prior to 11.2, like Oracle 9i or 10g, we should create an OracleDataSource instead of using Oracle's Universal Connection Pooling.

In our OracleDataSource instance, we turn on connection caching via 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; } }

In the above example, we were creating the OracleDataSource for connection pooling and configured some parameters. We can check all the configurable parameters on the OracleDataSource JavaDoc.

5. Conclusion

Nowadays, configuring Oracle database connection pooling using Spring is a piece of cake.

자동 구성을 사용하고 프로그래밍 방식으로 수행하는 방법을 살펴 보았습니다. Spring은 HikariCP 사용을 권장하지만 다른 옵션을 사용할 수 있습니다. 우리는주의를 기울이고 현재 필요에 맞는 올바른 구현을 선택해야합니다.

그리고 항상 그렇듯이 전체 예제는 GitHub에서 찾을 수 있습니다.