Dalam bahagian pertama artikel ini, kami mempelajari cara meningkatkan prestasi aplikasi kami, menggantikanTomcatdenganUndertow, iaitu pelayan web berprestasi tinggi, selain mendayakan dan mengkonfigurasi pemampatan data, untuk mengurangkan saiz respons HTTP yang merentasi rangkaian.
Sekarang, kita akan bercakap tentang cara meningkatkan prestasi aplikasi Spring Boot dalam bahagian kegigihan, tetapi pertama-tama kita perlu memahami apaJPA,HibernatedanHikari.
JPA atauJava Persistence API, yang kemudiannya dinamakan semula kepadaJakarta Persistence, ialah standard bahasa Java yang menerangkan antara muka biasa untuk data ketekunanframeworks.
SpesifikasiJPAmentakrifkan pemetaan hubungan objek secara dalaman, dan bukannya bergantung pada pelaksanaan pemetaan khusus vendor.
Rangka kerjaHibernateadalah salah satu daripada rangka kerjaORMyang menjadikan pelaksanaan konkrit spesifikasiJPA, iaitu jika dalam spesifikasi ini diterangkan bahawa kaedah diperlukan untukmengekalkan,kemas kinidanmengambil data, yang sebenarnya akan membina tingkah laku ini ialahHibernate, sertaEclipseLink, iaitu satu lagi.Hikari
Hikariialah rangka kerjapengumpulan sambungan, yang bertanggungjawab mengurus sambungan ke pangkalan data, memastikannya terbuka supaya ia boleh digunakan semula, dengan kata lain, ia adalahcachesambungan untuk permintaan yang akan datang, menjadikan capaian pangkalan data lebih pantas dan mengurangkan bilangan sambungan baharu yang akan dibuat.Mengkonfigurasi Hikari, JPA dan Hibernate
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
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
Hikari
akan disertakan denganauto-commitdilumpuhkan.
. Adalah lebih baik untuk menetapkan tamat masa yang singkat untuk gagal dengan cepat dan mengembalikan mesej ralat, daripada memastikan pelanggan menunggu selama-lamanya.
, termasuk sambungan melahu dan sedang digunakan, menentukan bilangan maksimum sambungan aktif ke pangkalan data. Jika kolam mencapai had ini dan tiada sambungan melahu, panggilan kegetConnection()akan disekat sehinggaconnectionTimeoutmilisaat sebelum gagal.
Mencari nilai yang sesuai adalah penting, kerana ramai orang berpendapat mereka akan mendapat prestasi yang hebat dengan menetapkan 50, 70 atau bahkan 100. Idealnya ialah mempunyai maksimum 20, iaitu bilanganspring.datasource.hikari.pool-name: Nama yang ditentukan pengguna untuk sambunganpooldan muncul terutamanya dalam konsol pengurusan pendaftaran danJMXuntuk mengenal pastipoolsdan konfigurasinya.
spring.datasource.jpa.open-in-view: ApabilaOSIV(Open Session In View) didayakan, sesi dikekalkan sepanjang permintaan, walaupun 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 pengelogan SQL yang sedang dilaksanakan dalam aplikasi kami. Kami biasanya membiarkannya didayakan dalam pembangunan, tetapi dilumpuhkan dalam pengeluaran.
spring.datasource.jpa.hibernate.ddl-auto: Mengkonfigurasikan gelagatHibernateberhubung dengan pangkalan dataschema. 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.
Hibernateperlu mendapatkan sambungan daripadapooluntuk mengetahui sama adaauto-commitdidayakan atau tidak, untuk setiap transaksi yang dibuatnya.Dengan ini, kami menutup bahagian kedua artikel. Bukan semua tetapan yang ada adalah mengenai prestasi, tetapi yang benar-benar memberi impak ialah tetapanHikarisepertikomit autodansaiz kolam, tetapan
JPAseperti HibernateOSIV(Buka Sesi Dalam Paparan) dan memaklumkan anda bahawa kami telah melumpuhkankomit automatikpenyedia.Dalam bahagian seterusnya kita akan bercakap tentang pengecualian dan cara ia boleh dikonfigurasikan, untuk menjimatkan sumberJVM(Java Virtual Machine).Rujukan:https://ms.wikipedia.org/wiki/Jakarta_Persistencehttps://www.ibm.com/docs/pt-br/was/8.5.5?topic=SSEQTP_8.5.5/com.ibm.websphere.nd.multiplatform.doc/ae/cejb_persistence.htm
https://github.com/brettwooldridge/HikariCPhttps://github.com/corona-warn-app/cwa-server/issues/556https://medium.com/@rafaelralf90/open-session-in-view-is-evil-fd9a21645f8e
Atas ialah kandungan terperinci Meningkatkan prestasi aplikasi Spring Boot - Bahagian II. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!