Oracle Connection Pooling med forår

1. Oversigt

Oracle er en af ​​de mest populære databaser i store produktionsmiljøer. Så som Spring-udviklere er det meget almindeligt at skulle arbejde med disse databaser.

I denne vejledning skal vi tale om, hvordan vi kan foretage denne integration.

2. Databasen

Den første ting, vi har brug for, er selvfølgelig databasen. Hvis vi ikke har en installeret, kan vi hente og installere nogen af ​​de tilgængelige databaser på Oracle Database Software Downloads. Men hvis vi ikke vil foretage nogen installation, kan vi også oprette nogen af ​​Oracle-databasebillederne til Docker.

I dette tilfælde skal vi bruge en Oracle Database 12c version 2 (12.2.0.2) Standard Edition Docker-billede. Derfor forhindrer vi os i at skulle installere ny software på vores computer.

3. Forbindelse pooling

Nu har vi databasen klar til indgående forbindelser. Lad os derefter lære nogle forskellige måder at lave forbindelsespooling om foråret.

3.1. HikariCP

Den nemmeste måde at samle forbindelser med Spring på er ved hjælp af autokonfiguration. Det spring-boot-starter-jdbc afhængighed inkluderer HikariCP som den foretrukne pooling datakilde. Derfor, hvis vi ser på vores pom.xml vi får at se:

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

Det spring-boot-starter-data-jpa afhængighed inkluderer spring-boot-starter-jdbc afhængighed transitivt for os.

Nu skal vi kun tilføje vores konfiguration i application.properties fil:

# OracleDB-forbindelsesindstillinger 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 indstillinger spring.datasource.hikari.minimumIdle = 5 spring.datasource.hikari.maximumPoolSize = 20 spring.datasource.hikari.idleTimeout = 30000 spring.datasource.hikari.maxLifetime = 2000000 spring.datasource.hikari 30000 spring.datasource.hikari.poolName = HikariPoolBooks # JPA-indstillinger spring.jpa.database-platform = org.hibernate.dialect.Oracle12cDialect spring.jpa.hibernate.use-new-id-generator-mappings = false spring.jpa.hibernate .ddl-auto = Opret

Som du kan se, har vi tre forskellige sektionskonfigurationsindstillinger:

  • Det OracleDB-forbindelsesindstillinger sektion er, hvor vi konfigurerede JDBC-forbindelsesegenskaberne, som vi altid gør
  • Det HikariCP-indstillinger sektion er hvor vi konfigurerer HikariCP-forbindelsespuljen. Hvis vi har brug for avanceret konfiguration, skal vi kontrollere HikariCP-konfigurationsegenskabslisten
  • Det JPA-indstillinger sektion er nogle grundlæggende konfigurationer til brug af dvale

Det er alt, hvad vi har brug for. Det kunne ikke være lettere, kunne det?

3.2. Tomcat og Commons DBCP2-forbindelsespooling

Spring anbefaler HikariCP til sin præstation. På den anden side understøtter den også Tomcat og Commons DBCP2 i autokonfigurerede applikationer til Spring Boot.

Det forsøger at bruge HikariCP. Hvis det ikke er tilgængeligt, så prøv at bruge Tomcat-pooling. Hvis ingen af ​​disse er tilgængelige, forsøger den at bruge Commons DBCP2.

Vi kan også specificere den forbindelsespool, der skal bruges. I så fald skal vi bare tilføje en ny ejendom til vores application.properties fil:

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

Hvis vi har brug for at konfigurere specifikke indstillinger, har vi deres præfikser til rådighed:

  • spring.datasource.hikari. * til HikariCP-konfiguration
  • spring.datasource.tomcat. * til konfiguration af Tomcat-pooling
  • spring.datasource.dbcp2. * til Commons DBC2-konfiguration

Og faktisk kan vi indstille forår.datasource.type til enhver anden Datakilde implementering. Det er ikke nødvendigt at være nogen af ​​de tre nævnte ovenfor.

Men i så fald vil vi bare have en grundlæggende out-of-the-box konfiguration. Der vil være mange tilfælde, hvor vi har brug for nogle avancerede konfigurationer. Lad os se nogle af dem.

3.3. Oracle Universal Connection Pooling

Hvis vi vil bruge avancerede konfigurationer, skal vi udtrykkeligt definere Datakilde bønne og indstil egenskaberne. Den nemmeste måde at gøre dette på er sandsynligvis ved at bruge @Konfiguration og @Bønne kommentarer.

Oracle Universal Connection Pool (UCP) til JDBC giver en komplet implementering til caching af JDBC-forbindelser. Det genbruger forbindelserne i stedet for at skabe nye. Det giver os også et sæt egenskaber til tilpasning af pooladfærd.

Hvis vi vil bruge UCP, skal vi tilføje følgende Maven-afhængigheder:

 com.oracle.database.jdbc ojdbc8 com.oracle.database.ha ons com.oracle.database.jdbc ucp 

Nu er vi klar til at erklære og konfigurere UCP-forbindelsespuljen:

@Configuration @Profile ("oracle-ucp") offentlig klasse OracleUCPConfiguration {@Bean public DataSource dataSource () kaster SQLException {PoolDataSource dataSource = PoolDataSourceFactory.getPoolDataSource (); dataSource.setUser ("bøger"); dataSource.setPassword ("bøger"); 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); returnere datakilde; }}

I ovenstående eksempel har vi tilpasset nogle poolegenskaber:

  • setInitialPoolSize angiver antallet af tilgængelige forbindelser, der er oprettet, efter at puljen er startet
  • setMinPoolSize angiver det mindste antal tilgængelige og lånte forbindelser, som vores pool opretholder, og
  • setMaxPoolSize angiver det maksimale antal tilgængelige og lånte forbindelser, som vores pool opretholder

Hvis vi har brug for at tilføje flere konfigurationsegenskaber, skal vi kontrollere PoolDataSource JavaDoc eller udviklerens guide.

4. Ældre Oracle-versioner

Til versioner før 11.2, som Oracle 9i eller 10g, skal vi oprette en OracleDataSource i stedet for at bruge Oracle's Universal Connection Pooling.

I vores OracleDataSource For eksempel tænder vi forbindelsescaching via setConnectionCachingEnabled:

@Configuration @Profile ("oracle") offentlig klasse OracleConfiguration {@Bean public DataSource dataSource () kaster SQLException {OracleDataSource dataSource = ny OracleDataSource (); dataSource.setUser ("bøger"); dataSource.setPassword ("bøger"); dataSource.setURL ("jdbc: oracle: thin: @ // localhost: 11521 / ORCLPDB1"); dataSource.setFastConnectionFailoverEnabled (true); dataSource.setImplicitCachingEnabled (true); dataSource.setConnectionCachingEnabled (true); returnere datakilde; }}

I ovenstående eksempel oprettede vi OracleDataSource til pooling af forbindelser og konfigureret nogle parametre. Vi kan kontrollere alle de konfigurerbare parametre på OracleDataSource JavaDoc.

5. Konklusion

I dag er konfiguration af Oracle-databaseforbindelse ved hjælp af Spring et stykke kage.

Vi har set, hvordan man gør det bare ved hjælp af autokonfiguration og programmatisk. Selvom Spring anbefaler brugen af ​​HikariCP, er andre muligheder tilgængelige. Vi skal være forsigtige og vælge den rigtige implementering til vores nuværende behov.

Og som altid kan det fulde eksempel findes på GitHub.