Rumah> Java> javaTutorial> teks badan

Meningkatkan prestasi aplikasi Spring Boot - Bahagian II

PHPz
Lepaskan: 2024-08-28 06:35:06
asal
375 orang telah melayarinya

Melhorando o desempenho de aplicações Spring Boot - Parte II

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

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.

Hibernate

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

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
Salin selepas log masuk
e
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
Salin selepas log masuk
e
Sekarang mari berikan ringkasan ringkas tentang pilihan:

Hikari

    spring.datasource.hikari.auto-commit: Jika palsu, setiap sambungan yang dikembalikan oleh
  • kolam sambungan

    akan disertakan denganauto-commitdilumpuhkan.

  • 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 telah lama aktif 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 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 bilangan
      benang
    • selari menggunakan sambungan.Semakin tinggi nilai, semakin sukar bagi pangkalan data untuk menguruskan sambungan ini dan kemungkinan besar kita tidak akan dapat mempunyai
    • throughput
    • yang mencukupi untuk menggunakan semua sambungan ini.Adalah penting untuk memahami bahawa dari sudut pandangan
    • RDBMS
    • (Relational Database Management System) adalah sukar untuk mengekalkan sambungan terbuka dengan dirinya sendiri, bayangkan n bilangan sambungan.
  • spring.datasource.hikari.minimum-idle: Bilangan minimum sambungan yang dikekalkan oleh kolam 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 sambunganpooldan muncul terutamanya dalam konsol pengurusan pendaftaran danJMXuntuk mengenal pastipoolsdan konfigurasinya.

JPA

  • 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:

    • tiada: Tidak melakukan apa-apa. Kami menguruskan skema bank secara manual.
    • validate: Mengesahkan pangkalan dataschema, tetapi tidak membuat perubahan. Ini berguna untuk memastikanskemasemasa bersetuju dengan entiti yang telah kami petakan.
    • kemas kini: Mengemas kini pangkalan dataskemauntuk mencerminkan perubahan dalam entiti.
    • cipta: Mencipta pangkalan dataskema. Jikaskemasudah wujud, ia akan mengalih keluar dan mencipta semula.
    • create-drop: Menciptaschemadaripada pangkalan data dan, apabila aplikasi selesai, mengalih keluarschema. Berguna untuk ujian, di mana kita mahu pangkalan data yang bersih dengan setiap ujian.
  • spring.jpa.properties.hibernate.generate_statistics: Berfungsi untuk mengumpulkan maklumat terperinci tentang Hibernate, seperti masa pelaksanaan pertanyaan, bilangan pertanyaan yang dilaksanakan dan metrik lain.

  • .
  • , dll). Ini memberi kesan kepada prestasi, kerana

    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

    JPA
dan

seperti 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/HikariCP

https://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!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!