Oracle Connection Pooling With Spring

1. Ikhtisar

Oracle adalah salah satu database paling populer di lingkungan produksi besar. Jadi, sebagai pengembang Spring, sangat umum untuk bekerja dengan database ini.

Dalam tutorial ini, kita akan berbicara tentang bagaimana kita dapat membuat integrasi ini.

2. Basis Data

Hal pertama yang kita butuhkan tentu saja adalah database. Jika kami tidak menginstalnya, kami dapat memperoleh dan menginstal database apa pun yang tersedia di Unduhan Perangkat Lunak Database Oracle. Tetapi jika kami tidak ingin melakukan instalasi apa pun, kami juga dapat membangun image database Oracle untuk Docker.

Dalam hal ini, kita akan menggunakan image Docker Edisi Standar Oracle Database 12c Release 2 (12.2.0.2) . Akibatnya, ini membuat kita tidak perlu menginstal perangkat lunak baru di komputer kita.

3. Koneksi Pooling

Sekarang kami memiliki database yang siap untuk koneksi masuk. Selanjutnya, mari pelajari beberapa cara berbeda untuk melakukan penggabungan koneksi di Spring.

3.1. HikariCP

Cara termudah untuk penggabungan koneksi dengan Spring menggunakan konfigurasi otomatis. The semi-boot-starter-jdbc ketergantungan termasuk HikariCP sebagai sumber pooling data yang disukai. Oleh karena itu, jika kita melihat pom.xml kita, kita akan melihat:

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

The semi-boot-starter-data-jpa ketergantungan termasuk semi-boot-starter-jdbc ketergantungan transitif bagi kita.

Sekarang kita hanya perlu menambahkan konfigurasi kita ke dalam file 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

Seperti yang Anda lihat, kami memiliki tiga pengaturan konfigurasi bagian yang berbeda:

  • Bagian pengaturan koneksi OracleDB adalah tempat kami mengonfigurasi properti koneksi JDBC seperti yang selalu kami lakukan
  • Bagian pengaturan HikariCP adalah tempat kami mengonfigurasi penggabungan koneksi HikariCP. Jika kita membutuhkan konfigurasi lanjutan, kita harus memeriksa daftar properti konfigurasi HikariCP
  • Bagian pengaturan JPA adalah beberapa konfigurasi dasar untuk menggunakan Hibernate

Hanya itu yang kami butuhkan. Tidak bisa lebih mudah, bukan?

3.2. Pengumpulan Koneksi DBCP2 Tomcat dan Commons

Spring merekomendasikan HikariCP untuk kinerjanya. Di sisi lain, ini juga mendukung Tomcat dan Commons DBCP2 dalam aplikasi konfigurasi otomatis Spring Boot.

Ia mencoba menggunakan HikariCP. Jika tidak tersedia, coba gunakan penggabungan Tomcat. Jika tidak satu pun tersedia, maka mencoba menggunakan Commons DBCP2.

Kami juga dapat menentukan pool koneksi yang akan digunakan. Dalam hal ini, kita hanya perlu menambahkan properti baru ke file application.properties :

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

Jika kami perlu mengonfigurasi pengaturan khusus, kami telah menyediakan awalannya:

  • spring.datasource.hikari. * untuk konfigurasi HikariCP
  • spring.datasource.tomcat. * untuk konfigurasi penggabungan Tomcat
  • spring.datasource.dbcp2. * untuk konfigurasi Commons DBC2

Dan sebenarnya, kita bisa mengatur musim semi. datasetource.type ke implementasi DataSource lainnya . Tidak perlu menjadi salah satu dari tiga yang disebutkan di atas.

Namun dalam kasus ini, kami hanya akan memiliki konfigurasi dasar out-of-the-box. Akan ada banyak kasus di mana kita memerlukan beberapa konfigurasi lanjutan. Mari kita lihat beberapa di antaranya.

3.3. Oracle Universal Connection Pooling

Jika kita ingin menggunakan konfigurasi lanjutan, kita perlu secara eksplisit mendefinisikan kacang DataSource dan mengatur propertinya. Mungkin cara termudah untuk melakukan ini adalah dengan menggunakan @Configuration dan @Bean penjelasan.

Oracle Universal Connection Pool (UCP) for JDBC menyediakan implementasi fitur lengkap untuk cache koneksi JDBC. Ini menggunakan kembali koneksi alih-alih membuat yang baru. Ini juga memberi kita sekumpulan properti untuk menyesuaikan perilaku kumpulan.

Jika kita ingin menggunakan UCP, kita perlu menambahkan dependensi Maven berikut:

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

Sekarang kami siap untuk mendeklarasikan dan mengkonfigurasi kumpulan koneksi 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; } }

Dalam contoh di atas, kami telah menyesuaikan beberapa properti kumpulan:

  • setInitialPoolSize menentukan jumlah koneksi yang tersedia yang dibuat setelah pool dimulai
  • setMinPoolSize menentukan jumlah minimum koneksi yang tersedia dan dipinjam yang dikelola oleh pool kami, dan
  • setMaxPoolSize menentukan jumlah maksimum koneksi yang tersedia dan dipinjam yang dipertahankan oleh pool kami

Jika kita perlu menambahkan lebih banyak properti konfigurasi, kita harus memeriksa PoolDataSource JavaDoc atau panduan pengembang.

4. Versi Oracle yang Lebih Lama

Untuk versi sebelum 11.2, seperti Oracle 9i atau 10g , kita harus membuat OracleDataSource daripada menggunakan Oracle Universal Connection Pooling.

Dalam contoh OracleDataSource kami , kami mengaktifkan cache koneksi melalui 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; } }

Dalam contoh di atas, kami membuat OracleDataSource untuk penyatuan koneksi dan mengonfigurasi beberapa parameter. Kita dapat memeriksa semua parameter yang dapat dikonfigurasi di OracleDataSource JavaDoc.

5. Kesimpulan

Saat ini, mengkonfigurasi penyatuan koneksi database Oracle menggunakan Spring adalah sangat mudah.

Kami telah melihat cara melakukannya hanya dengan menggunakan konfigurasi otomatis dan secara terprogram. Meskipun Spring merekomendasikan penggunaan HikariCP, opsi lain tersedia. Kita harus berhati-hati dan memilih implementasi yang tepat untuk kebutuhan kita saat ini.

Dan, seperti biasa, contoh lengkapnya dapat ditemukan di GitHub.