Oracle Connection Pooling With Spring

1. Overzicht

Oracle is een van de meest populaire databases in grote productieomgevingen. Als Spring-ontwikkelaars is het dus heel gewoon om met deze databases te moeten werken.

In deze tutorial gaan we praten over hoe we deze integratie kunnen maken.

2. De database

Het eerste dat we nodig hebben, is natuurlijk de database. Als we er geen hebben geïnstalleerd, kunnen we alle databases downloaden en installeren die beschikbaar zijn op de Oracle Database Software Downloads. Maar voor het geval we geen installatie willen doen, kunnen we ook een van de Oracle-database-images voor Docker bouwen.

In dit geval gebruiken we een Oracle Database 12c versie 2 (12.2.0.2) Standard Edition Docker-afbeelding. Hierdoor hoeven we geen nieuwe software op onze computer te installeren.

3. Pooling van verbindingen

Nu hebben we de database klaar voor inkomende verbindingen. Laten we vervolgens een aantal verschillende manieren leren om verbindingspooling in het voorjaar te doen.

3.1. HikariCP

De eenvoudigste manier voor pooling van verbindingen met Spring is door gebruik te maken van autoconfiguratie. De spring-boot-starter-jdbc afhankelijkheid omvat HikariCP als de geprefereerde gegevensbron voor pooling. Daarom, als we een kijkje nemen in onze pom.xml we zullen zien:

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

De spring-boot-starter-data-jpa afhankelijkheid omvat de spring-boot-starter-jdbc afhankelijkheid tijdelijk voor ons.

Nu hoeven we alleen onze configuratie toe te voegen aan het application.properties het dossier:

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

Zoals u kunt zien, hebben we drie verschillende sectieconfiguratie-instellingen:

  • De OracleDB-verbindingsinstellingen sectie is waar we de JDBC-verbindingseigenschappen hebben geconfigureerd zoals we altijd doen
  • De HikariCP-instellingen sectie is waar we de HikariCP-verbindingspooling configureren. Als we geavanceerde configuratie nodig hebben, moeten we de lijst met configuratie-eigenschappen van HikariCP controleren
  • De JPA-instellingen sectie is een basisconfiguratie voor het gebruik van Hibernate

Dat is alles wat we nodig hebben. Makkelijker kan het niet, toch?

3.2. Tomcat en Commons DBCP2-verbindingspooling

Spring beveelt HikariCP aan vanwege zijn prestaties. Aan de andere kant ondersteunt het ook Tomcat en Commons DBCP2 in automatisch geconfigureerde Spring Boot-toepassingen.

Het probeert de HikariCP te gebruiken. Als het niet beschikbaar is, probeert u de Tomcat-pooling te gebruiken. Als geen van beide beschikbaar is, probeert het Commons DBCP2 te gebruiken.

We kunnen ook de te gebruiken verbindingspool specificeren. In dat geval hoeven we alleen maar een nieuw pand toe te voegen aan ons application.properties het dossier:

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

Als we specifieke instellingen moeten configureren, hebben we hun voorvoegsels beschikbaar:

  • spring.datasource.hikari. * voor HikariCP-configuratie
  • spring.datasource.tomcat. * voor de configuratie van Tomcat-pooling
  • spring.datasource.dbcp2. * voor Commons DBC2-configuratie

En eigenlijk kunnen we instellen voorjaar.datasource.type naar een ander Databron implementatie. Het is niet nodig om een ​​van de drie hierboven genoemde te zijn.

Maar in dat geval hebben we alleen een standaard out-of-the-box-configuratie. Er zullen veel gevallen zijn waarin we enkele geavanceerde configuraties nodig hebben. Laten we er een paar bekijken.

3.3. Oracle Universal Connection Pooling

Als we geavanceerde configuraties willen gebruiken, moeten we de Databron bean en stel de eigenschappen in. Waarschijnlijk de gemakkelijkste manier om dit te doen, is door de @Configuratie en @Boon annotaties.

Oracle Universal Connection Pool (UCP) voor JDBC biedt een volledige implementatie voor het cachen van JDBC-verbindingen. Het hergebruikt de verbindingen in plaats van nieuwe te maken. Het geeft ons ook een reeks eigenschappen voor het aanpassen van het poolgedrag.

Als we UCP willen gebruiken, moeten we de volgende Maven-afhankelijkheden toevoegen:

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

Nu zijn we klaar om de UCP-verbindingspool te declareren en te configureren:

@Configuration @Profile ("oracle-ucp") openbare klasse OracleUCPConfiguration {@Bean openbare DataSource dataSource () gooit SQLException {PoolDataSource dataSource = PoolDataSourceFactory.getPoolDataSource (); dataSource.setUser ("boeken"); dataSource.setPassword ("boeken"); 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); retourneer dataSource; }}

In het bovenstaande voorbeeld hebben we enkele pooleigenschappen aangepast:

  • setInitialPoolSize specificeert het aantal beschikbare verbindingen dat wordt gemaakt nadat de pool is gestart
  • setMinPoolSize specificeert het minimum aantal beschikbare en geleende verbindingen dat onze pool onderhoudt, en
  • setMaxPoolSize specificeert het maximale aantal beschikbare en geleende verbindingen dat onze pool onderhoudt

Als we meer configuratie-eigenschappen moeten toevoegen, moeten we het PoolDataSource JavaDoc of de handleiding voor ontwikkelaars.

4. Oudere Oracle-versies

Voor versies vóór 11.2, zoals Oracle 9i of 10g, moeten we een OracleDataSource in plaats van Oracle's Universal Connection Pooling te gebruiken.

In onze OracleDataSource we schakelen bijvoorbeeld het cachen van verbindingen in via setConnectionCachingEnabled:

@Configuration @Profile ("oracle") openbare klasse OracleConfiguration {@Bean openbare DataSource dataSource () gooit SQLException {OracleDataSource dataSource = nieuwe OracleDataSource (); dataSource.setUser ("boeken"); dataSource.setPassword ("boeken"); dataSource.setURL ("jdbc: oracle: thin: @ // localhost: 11521 / ORCLPDB1"); dataSource.setFastConnectionFailoverEnabled (true); dataSource.setImplicitCachingEnabled (true); dataSource.setConnectionCachingEnabled (true); retourneer dataSource; }}

In het bovenstaande voorbeeld maakten we het OracleDataSource voor pooling van verbindingen en configureerde enkele parameters. We kunnen alle configureerbare parameters op het OracleDataSource JavaDoc.

5. Conclusie

Tegenwoordig is het configureren van pooling van Oracle-databaseverbindingen met Spring een fluitje van een cent.

We hebben gezien hoe we dit moeten doen door alleen autoconfiguratie en programmatisch te gebruiken. Hoewel Spring het gebruik van HikariCP aanbeveelt, zijn er andere opties beschikbaar. We moeten voorzichtig zijn en de juiste implementatie kiezen voor onze huidige behoeften.

En, zoals altijd, is het volledige voorbeeld te vinden op GitHub.


$config[zx-auto] not found$config[zx-overlay] not found