Oracle Connection Pooling med våren

1. Oversikt

Oracle er en av de mest populære databasene i store produksjonsmiljøer. Så som Spring-utviklere er det veldig vanlig å måtte jobbe med disse databasene.

I denne opplæringen skal vi snakke om hvordan vi kan gjøre denne integrasjonen.

2. Databasen

Det første vi trenger er selvfølgelig databasen. Hvis vi ikke har en installert, kan vi hente og installere noen av databasene som er tilgjengelige på Oracle Database Software Downloads. Men i tilfelle vi ikke vil gjøre noen installasjon, kan vi også lage noen av Oracle-databasebildene for Docker.

I dette tilfellet skal vi bruke en Oracle Database 12c versjon 2 (12.2.0.2) Standard Edition Docker-bilde. Dette hindrer oss i å måtte installere ny programvare på datamaskinen vår.

3. Tilkoblingsbasseng

Nå har vi databasen klar for innkommende tilkoblinger. Deretter, la oss lære noen forskjellige måter å gjøre tilkoblingssamling på våren.

3.1. HikariCP

Den enkleste måten å koble sammen med Spring på er å bruke autokonfigurasjon. De spring-boot-starter-jdbc avhengighet inkluderer HikariCP som den foretrukne kildedatakilden. Derfor, hvis vi tar en titt på vår pom.xml vi får se:

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

De spring-boot-starter-data-jpa avhengighet inkluderer spring-boot-starter-jdbc avhengighet transitivt for oss.

Nå trenger vi bare å legge til konfigurasjonen vår i application.properties fil:

# OracleDB-tilkoblingsinnstillinger 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-innstillinger 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-innstillinger spring.jpa.database-platform = org.hibernate.dialect.Oracle12cDialect spring.jpa.hibernate.use-new-id-generator-mappings = false spring.jpa.hibernate .ddl-auto = opprett

Som du kan se, har vi tre forskjellige seksjonskonfigurasjonsinnstillinger:

  • De OracleDB-tilkoblingsinnstillinger delen er der vi konfigurerte JDBC-tilkoblingsegenskapene som vi alltid gjør
  • De HikariCP-innstillinger delen er der vi konfigurerer HikariCP-tilkoblingssamlingen. I tilfelle vi trenger avansert konfigurasjon, bør vi sjekke HikariCP-konfigurasjonsegenskapelisten
  • De JPA-innstillinger delen er noen grunnleggende konfigurasjoner for bruk av dvalemodus

Det er alt vi trenger. Det kunne vel ikke vært enklere?

3.2. Tomcat og Commons DBCP2-tilkoblingsbasseng

Spring anbefaler HikariCP for ytelsen. På den annen side støtter den også Tomcat og Commons DBCP2 i autokonfigurerte applikasjoner med Spring Boot.

Den prøver å bruke HikariCP. Hvis den ikke er tilgjengelig, kan du prøve å bruke Tomcat-samlingen. Hvis ingen av disse er tilgjengelige, prøver den å bruke Commons DBCP2.

Vi kan også spesifisere tilkoblingsbassenget som skal brukes. I så fall trenger vi bare å legge til en ny eiendom i vår application.properties fil:

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

Hvis vi trenger å konfigurere spesifikke innstillinger, har vi tilgjengelige prefikser:

  • vår.datasource.hikari. * for HikariCP-konfigurasjon
  • spring.datasource.tomcat. * for Tomcat pooling-konfigurasjon
  • spring.datasource.dbcp2. * for Commons DBC2-konfigurasjon

Og faktisk kan vi stille vår.datasource.type til andre Datakilde gjennomføring. Det er ikke nødvendig å være noen av de tre som er nevnt ovenfor.

Men i så fall vil vi bare ha en grunnleggende konfigurasjon utenom boksen. Det vil være mange tilfeller der vi trenger noen avanserte konfigurasjoner. La oss se noen av dem.

3.3. Oracle Universal Connection Pooling

Hvis vi vil bruke avanserte konfigurasjoner, må vi eksplisitt definere Datakilde bønne og angi egenskapene. Sannsynligvis er den enkleste måten å gjøre dette på @Konfigurasjon og @Bønne kommentarer.

Oracle Universal Connection Pool (UCP) for JDBC gir en fullverdig implementering for caching av JDBC-tilkoblinger. Det gjenbruker forbindelsene i stedet for å skape nye. Det gir oss også et sett med egenskaper for å tilpasse bassengadferd.

Hvis vi vil bruke UCP, må vi legge til følgende Maven-avhengigheter:

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

Nå er vi klare til å erklære og konfigurere UCP-tilkoblingsbassenget:

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

I eksemplet ovenfor har vi tilpasset noen bassengegenskaper:

  • setInitialPoolSize angir antall tilgjengelige tilkoblinger opprettet etter at bassenget er startet
  • setMinPoolSize angir minimum antall tilgjengelige og lånte forbindelser som bassenget vårt opprettholder, og
  • setMaxPoolSize angir maksimalt antall tilgjengelige og lånte forbindelser som bassenget vårt opprettholder

Hvis vi trenger å legge til flere konfigurasjonsegenskaper, bør vi sjekke PoolDataSource JavaDoc eller utviklerens guide.

4. Eldre Oracle-versjoner

For versjoner før 11.2, som Oracle 9i eller 10g, bør vi lage en OracleDataSource i stedet for å bruke Oracle's Universal Connection Pooling.

I vår OracleDataSource For eksempel slår vi på tilkoblingsbufring via setConnectionCachingEnabled:

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

I eksemplet ovenfor opprettet vi OracleDataSource for tilkoblingssamling og konfigurert noen parametere. Vi kan sjekke alle de konfigurerbare parametrene på OracleDataSource JavaDoc.

5. Konklusjon

I dag er det å sette opp Oracle-databaseforbindelse ved å bruke Spring.

Vi har sett hvordan du gjør det bare ved hjelp av autokonfigurasjon og programmatisk. Selv om Spring anbefaler bruk av HikariCP, er andre alternativer tilgjengelige. Vi bør være forsiktige og velge riktig implementering for våre nåværende behov.

Og som alltid kan hele eksemplet finnes på GitHub.


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