Oracle Connection Pooling Dengan Musim Semi

1. Gambaran keseluruhan

Oracle adalah salah satu pangkalan data yang paling popular di persekitaran pengeluaran yang besar. Oleh itu, sebagai pembangun Spring, sangat biasa untuk bekerja dengan pangkalan data ini.

Dalam tutorial ini, kita akan membincangkan bagaimana kita dapat membuat integrasi ini.

2. Pangkalan Data

Perkara pertama yang kita perlukan adalah, tentu saja, pangkalan data. Sekiranya kita tidak memasangnya, kita boleh mendapatkan dan memasang salah satu pangkalan data yang terdapat pada Muat turun Perisian Pangkalan Data Oracle. Tetapi sekiranya kita tidak mahu melakukan pemasangan, kita juga dapat membuat gambar pangkalan data Oracle untuk Docker.

Dalam kes ini, kita akan menggunakan gambar Oracle Database 12c Release 2 (12.2.0.2) Edisi Standard Docker. Akibatnya, ini membuat kita tidak perlu memasang perisian baru di komputer kita.

3. Penyambungan Penyambungan

Sekarang kami mempunyai pangkalan data yang siap untuk sambungan masuk. Kemudian, mari kita pelajari beberapa cara yang berbeza untuk melakukan penyatuan sambungan di Spring.

3.1. HikariCP

Cara termudah untuk penyatuan sambungan dengan Spring adalah menggunakan konfigurasi automatik. The bunga-boot-starter-JDBC pergantungan termasuk HikariCP sebagai sumber data pengumpulan pilihan. Oleh itu, jika kita melihat ke dalam pom.xml kita akan melihat:

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

The bunga-boot-starter-data-jpa pergantungan termasuk bunga-boot-starter-JDBC pergantungan transitively untuk 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 mempunyai tiga tetapan konfigurasi bahagian yang berbeza:

  • Bahagian tetapan sambungan OracleDB adalah tempat kami mengkonfigurasi sifat sambungan JDBC seperti biasa
  • Bahagian tetapan HikariCP adalah tempat kami mengkonfigurasi penyatuan sambungan HikariCP. Sekiranya kita memerlukan konfigurasi lanjutan, kita harus memeriksa senarai harta tanah konfigurasi HikariCP
  • Bahagian tetapan JPA adalah beberapa konfigurasi asas untuk menggunakan Hibernate

Itu sahaja yang kita perlukan. Tidak mungkin lebih mudah, bukan?

3.2. Penyatuan Sambungan Tomcat dan Commons DBCP2

Spring mengesyorkan HikariCP untuk prestasinya. Sebaliknya, ia juga menyokong aplikasi Tomcat dan Commons DBCP2 dalam Spring Boot yang dikonfigurasi secara automatik.

Ia cuba menggunakan HikariCP. Sekiranya tidak tersedia, cuba gunakan kumpulan Tomcat. Sekiranya tidak ada yang tersedia, maka ia akan cuba menggunakan Commons DBCP2.

Kami juga dapat menentukan kumpulan sambungan yang akan digunakan. Sekiranya demikian, kita hanya perlu menambahkan harta baru ke fail application.properties kami :

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

Sekiranya kita perlu mengkonfigurasi tetapan tertentu, kita mempunyai awalan mereka:

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

Dan, sebenarnya, kita boleh menetapkan musim bunga. datasource.type kepada seseorang pun dari sumber data pelaksanaan. Tidak perlu menjadi salah satu daripada tiga perkara di atas.

Tetapi dalam kes itu, kita hanya akan mempunyai konfigurasi asas yang tidak sesuai. Akan ada banyak kes di mana kita memerlukan beberapa konfigurasi lanjutan. Mari lihat sebahagian daripadanya.

3.3. Oracle Universal Connection Pooling

Sekiranya kita ingin menggunakan konfigurasi lanjutan, kita perlu secara jelas menentukan kacang DataSource dan menetapkan sifatnya. Mungkin cara yang paling mudah untuk melakukan ini adalah dengan menggunakan @Configuration dan @Bean penjelasan.

Oracle Universal Connection Pool (UCP) untuk JDBC menyediakan pelaksanaan ciri penuh untuk membuat cache sambungan JDBC. Ia menggunakan semula sambungan dan bukannya membuat yang baru. Ini juga memberi kita satu set sifat untuk menyesuaikan tingkah laku kumpulan.

Sekiranya kita ingin menggunakan UCP, kita perlu menambahkan kebergantungan Maven berikut:

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

Sekarang kami bersedia untuk menyatakan dan mengkonfigurasi kumpulan sambungan 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 sifat kumpulan:

  • setInitialPoolSize menentukan bilangan sambungan yang tersedia setelah kumpulan dimulakan
  • setMinPoolSize menentukan bilangan minimum sambungan yang tersedia dan dipinjam yang dikendalikan oleh kolam kami, dan
  • setMaxPoolSize menentukan bilangan maksimum sambungan yang tersedia dan dipinjam yang dikendalikan oleh kolam kami

Sekiranya kita perlu menambahkan lebih banyak sifat konfigurasi, kita harus menyemak PoolDataSource JavaDoc atau panduan pemaju.

4. Versi Oracle Lebih Lama

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

Dalam contoh OracleDataSource kami , kami menghidupkan cache sambungan 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 penyatuan dan mengkonfigurasi beberapa parameter. Kita dapat memeriksa semua parameter yang dapat dikonfigurasi di OracleDataSource JavaDoc.

5. Kesimpulan

Pada masa kini, mengkonfigurasi penyatuan pangkalan data Oracle menggunakan Spring adalah sebilangan kek.

Kami telah melihat cara melakukannya hanya dengan menggunakan konfigurasi automatik dan secara programatik. Walaupun Spring mengesyorkan penggunaan HikariCP, pilihan lain ada. Kita harus berhati-hati dan memilih pelaksanaan yang tepat untuk keperluan semasa kita.

Dan, seperti biasa, contoh lengkap boleh didapati di GitHub.