Dalam bahagian pertama artikel ini, kami mempelajari cara meningkatkan prestasi aplikasi kami, menggantikan Tomcat dengan Undertow, iaitu pelayan web berprestasi tinggi, selain mendayakan dan mengkonfigurasi pemampatan data, untuk mengurangkan saiz respons HTTP yang bergerak melalui rangkaian.
Sekarang, kita akan bercakap tentang cara meningkatkan prestasi aplikasi Spring Boot dalam bahagian kegigihan, tetapi pertama-tama kita perlu memahami apa JPA, Hibernate dan Hikari.
JPA atau Java Persistence API, yang kemudiannya dinamakan semula kepada Jakarta Persistence, ialah piawaian bahasa Java yang menerangkan perkara biasa antara muka untuk rangka kerja kegigihan data.
Spesifikasi JPA mentakrifkan pemetaan hubungan objek secara dalaman, dan bukannya bergantung pada pelaksanaan pemetaan khusus vendor.
Hibernate ialah salah satu daripada rangka kerja ORM yang menjadikan pelaksanaan konkrit spesifikasi JPA, Dalam erti kata lain, jika spesifikasi ini menerangkan keperluan untuk kaedah berterusan, alih keluar, kemas kini dan mengambil data, siapa yang akan sebenarnya membina tingkah laku ini ialah Hibernate, serta EclipseLink, iaitu satu lagi ORM .
Hikari ialah rangka kerja pengumpulan sambungan, yang bertanggungjawab menguruskan sambungan ke pangkalan data, memastikannya terbuka supaya ia boleh digunakan semula, iaitu , ia merupakan cache sambungan untuk permintaan masa hadapan, menjadikan akses kepada pangkalan data lebih pantas dan mengurangkan bilangan sambungan baharu yang akan dibuat.
Konfigurasi yang mungkin kami lakukan untuk meningkatkan prestasi adalah seperti berikut:
Menggunakan application.yml:
spring: hikari: auto-commit: false connection-timeout: 250 max-lifetime: 600000 maximum-pool-size: 20 minimum-idle: 10 pool-name: master jpa: open-in-view: false show-sql: true hibernate: ddl-auto: none properties: hibernate.connection.provider_disables_autocommit: true hibernate.generate_statistics: true
Menggunakan application.properties:
spring.datasource.hikari.auto-commit=false spring.datasource.hikari.connection-timeout=50 spring.datasource.hikari.max-lifetime=600000 spring.datasource.hikari.maximum-pool-size=20 spring.datasource.hikari.minimum-idle=10 spring.datasource.hikari.pool-name=master spring.datasource.jpa.open-in-view=false spring.datasource.jpa.show-sql=true spring.datasource.jpa.hibernate.ddl-auto=none spring.jpa.properties.hibernate.generate_statistics=true spring.jpa.properties.hibernate.connection.provider_disables_autocommit=true
Sekarang mari kita berikan ringkasan ringkas tentang pilihan:
spring.datasource.hikari.auto-commit: Jika palsu, setiap sambungan yang dikembalikan oleh kolam sambungan akan disertakan dengan autokomit dilumpuhkan.
spring.datasource.hikari.connection-timeout: Masa, dalam milisaat, pelanggan akan menunggu sambungan daripada pool. Adalah lebih baik untuk menetapkan tamat masa yang singkat untuk gagal dengan cepat dan mengembalikan mesej ralat, daripada memastikan pelanggan menunggu selama-lamanya.
spring.datasource.hikari.max-lifetime: Masa maksimum sambungan boleh kekal aktif. Mengkonfigurasi parameter ini adalah penting untuk mengelakkan kegagalan akibat sambungan yang bermasalah dan meningkatkan keselamatan, kerana sambungan yang aktif untuk masa yang lama lebih terdedah kepada serangan.
spring.datasource.hikari.maximum-pool-size: Saiz maksimum pool, termasuk sambungan melahu dan sedang digunakan, menentukan bilangan maksimum sambungan aktif ke pangkalan data. Jika kolam mencapai had ini dan tiada sambungan melahu, panggilan ke getConnection() akan disekat sehingga connectionTimeout milisaat sebelum gagal.
spring.datasource.hikari.minimum-idle: Bilangan sambungan minimum yang dikekalkan oleh kumpulan apabila permintaan rendah. Kolam renang boleh mengurangkan sambungan sehingga 10 dan menciptanya semula mengikut keperluan. Walau bagaimanapun, untuk prestasi maksimum dan tindak balas yang lebih baik terhadap lonjakan permintaan, adalah disyorkan untuk tidak menetapkan nilai ini, membolehkan Hikari berfungsi sebagai kumpulan bersaiz tetap. Lalai: sama seperti spring.datasource.hikari.maximum-pool-size.
spring.datasource.hikari.pool-name: Nama yang ditentukan pengguna untuk sambungan pool dan muncul terutamanya dalam konsol pengurusan pendaftaran dan JMX untuk mengenal pasti kolam dan tetapannya.
spring.datasource.jpa.open-in-view: Apabila OSIV (Open Session In View) didayakan, sesi dikekalkan sepanjang permintaan , malah tanpa anotasi @Transactional. Ini boleh menyebabkan masalah prestasi, seperti kekurangan respons aplikasi, kerana sesi mengekalkan sambungan ke pangkalan data sehingga akhir permintaan.
spring.datasource.jpa.show-sql: Memaparkan log SQL yang sedang dilaksanakan dalam aplikasi kami. Kami biasanya membiarkannya didayakan dalam pembangunan, tetapi dilumpuhkan dalam pengeluaran.
spring.datasource.jpa.hibernate.ddl-auto: Mengkonfigurasikan gelagat Hibernate berhubung dengan pangkalan data skema. Ia boleh mempunyai nilai berikut:
spring.jpa.properties.hibernate.generate_statistics: Berfungsi untuk mengumpulkan maklumat terperinci tentang Hibernate, seperti masa pelaksanaan pertanyaan, bilangan pertanyaan yang dilaksanakan dan metrik lain.
spring.jpa.properties.hibernate.connection.provider_disables_autocommit: Memaklumkan Hibernate bahawa kami telah melumpuhkan autokomit daripada penyedia (PostgreSQL, MySQL, dll). Ini memberi kesan kepada prestasi kerana Hibernate perlu mendapatkan sambungan daripada pool untuk mengetahui sama ada autokomit didayakan atau tidak . , untuk setiap transaksi yang dia buat.
Dengan ini, kami menutup bahagian kedua artikel itu. Bukan semua tetapan yang hadir adalah mengenai prestasi, tetapi tetapan yang benar-benar memberi impak ialah tetapan Hikari seperti komit automatik dan saiz kolam , JPA dan Hibernate seperti OSIV (Sesi Terbuka Dalam Pandangan) dan memaklumkan anda bahawa kami telah melumpuhkan komit automatik daripada pembekal.
Dalam bahagian seterusnya kita akan bercakap tentang pengecualian dan cara ia boleh dikonfigurasikan, untuk menyimpan sumber JVM (Java Virtual Machine).
Rujukan:
Atas ialah kandungan terperinci Meningkatkan prestasi aplikasi Spring Boot - Bahagian II. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!