Inhaltsverzeichnis
Eine Konfiguration, die wir möglicherweise durchführen, um die Leistung zu verbessern, ist wie folgt:
Heim Java javaLernprogramm Verbesserung der Leistung von Spring Boot-Anwendungen – Teil II

Verbesserung der Leistung von Spring Boot-Anwendungen – Teil II

Aug 28, 2024 am 06:35 AM

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

Im ersten Teil dieses Artikels haben wir gelernt, wie wir die Leistung unserer Anwendungen verbessern können, indem wir Tomcat durch Undertow ersetzt haben ein Hochleistungs-Webserver, zusätzlich zur Aktivierung und Konfiguration der Datenkomprimierung, um die Größe von HTTP-Antworten zu reduzieren, die über das Netzwerk übertragen werden.

Jetzt werden wir darüber sprechen, wie die Leistung von Spring Boot-Anwendungen im Persistenzteil verbessert werden kann, aber zuerst müssen wir verstehen, was JPA, Hibernate und Hikari.

JPA

JPA oder

Java Persistence API, das später in Jakarta Persistence umbenannt wurde, ist ein Java-Sprachstandard, der eine gemeinsame Sprache beschreibt Schnittstelle für Datenpersistenz-Frameworks.

Die

JPA-Spezifikation definiert die objektrelationale Zuordnung intern, anstatt sich auf herstellerspezifische Zuordnungsimplementierungen zu verlassen.

Überwintern

Hibernate ist eines der ORM-Frameworks, das die konkrete Umsetzung der JPA-Spezifikation ermöglicht. Mit anderen Worten: Wenn diese Spezifikation die Notwendigkeit von Methoden zum Peristieren, Entfernen, Aktualisieren und Datenabrufen beschreibt, wer wird das tun? Der eigentliche Aufbau dieser Verhaltensweisen ist Hibernate sowie EclipseLink, was ein weiteres ORM . Hikari

Hikari ist ein Verbindungspooling-Framework, das für die Verwaltung von Verbindungen zur Datenbank verantwortlich ist und diese offen hält, damit sie wiederverwendet werden können Es handelt sich um einen Cache von Verbindungen für zukünftige Anfragen, der den Zugriff auf die Datenbank beschleunigt und die Anzahl der neu zu erstellenden Verbindungen reduziert. Konfigurieren von Hikari, JPA und Hibernate

Eine Konfiguration, die wir möglicherweise durchführen, um die Leistung zu verbessern, ist wie folgt:

Verwenden von application.yml:


Anwendung.properties verwenden:
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
Nach dem Login kopieren


Lassen Sie uns nun eine kurze Zusammenfassung der Optionen geben:
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
Nach dem Login kopieren

Hikari

    spring.datasource.hikari.auto-commit: Wenn „false“, wird jede vom
  • Verbindungspool

    zurückgegebene Verbindung mit deaktiviertem Auto-Commit geliefert.

  • spring.datasource.hikari.connection-timeout: Zeit in Millisekunden, die der Client auf eine Verbindung vom
  • Pool

    wartet. Es ist vorzuziehen, ein kurzes Timeout festzulegen, um schnell fehlzuschlagen und eine Fehlermeldung zurückzugeben, anstatt den Client auf unbestimmte Zeit warten zu lassen.

  • spring.datasource.hikari.max-lifetime: Maximale Zeit, die eine Verbindung aktiv bleiben kann. Die Konfiguration dieses Parameters ist entscheidend, um Ausfälle aufgrund problematischer Verbindungen zu vermeiden und die Sicherheit zu erhöhen, da Verbindungen, die über einen längeren Zeitraum aktiv sind, anfälliger für Angriffe sind.
  • spring.datasource.hikari.maximum-pool-size: Maximale Größe des
  • Pools

    , einschließlich inaktiver und verwendeter Verbindungen, wodurch die maximale Anzahl aktiver Verbindungen zur Datenbank bestimmt wird. Wenn der Pool dieses Limit erreicht und keine inaktiven Verbindungen vorhanden sind, werden Aufrufe von getConnection() bis zu connectionTimeout Millisekunden lang blockiert, bevor sie fehlschlagen.

    Es ist wichtig, einen geeigneten Wert zu finden, da viele Leute glauben, dass sie eine großartige Leistung erzielen, wenn sie 50, 70 oder sogar 100 einstellen. Ideal ist ein Maximum von 20, was der Anzahl der
      Threads
    • entspricht parallel über Verbindungen. Je höher der Wert, desto schwieriger wird es für die Datenbank, diese Verbindungen zu verwalten, und höchstwahrscheinlich können wir nicht über genügend
    • Durchsatz
    • verfügen, um alle diese Verbindungen zu nutzen. Es ist wichtig zu verstehen, dass es aus Sicht des
    • RDBMS
    • (Relationales Datenbankverwaltungssystem) schwierig ist, eine offene Verbindung mit sich selbst aufrechtzuerhalten, stellen Sie sich n Anzahl von vor Verbindungen.
  • spring.datasource.hikari.minimum-idle: Mindestanzahl von Verbindungen, die der Pool bei geringer Nachfrage aufrechterhält. Der Pool kann Verbindungen auf bis zu 10 reduzieren und diese bei Bedarf neu erstellen. Für maximale Leistung und eine bessere Reaktion auf Nachfragespitzen wird jedoch empfohlen, diesen Wert nicht festzulegen, damit Hikari als Pool mit fester Größe fungieren kann. Standard: wie spring.datasource.hikari.maximum-pool-size.
  • spring.datasource.hikari.pool-name: Benutzerdefinierter Name für die Verbindung pool und erscheint hauptsächlich in Registrierungsverwaltungskonsolen und JMX zur Identifizierung von Pools und deren Einstellungen.

JPA

  • spring.datasource.jpa.open-in-view: Wenn OSIV (Open Session In View) aktiviert ist, wird eine Sitzung sogar während der gesamten Anfrage aufrechterhalten ohne die @Transactional-Annotation. Dies kann zu Leistungsproblemen wie fehlenden Anwendungsantworten führen, da die Sitzung die Verbindung zur Datenbank bis zum Ende der Anfrage aufrechterhält.

  • spring.datasource.jpa.show-sql: Zeigt das SQL-Protokoll an, das in unserer Anwendung ausgeführt wird. Wir lassen es in der Entwicklung im Allgemeinen aktiviert, in der Produktion jedoch deaktiviert.

  • spring.datasource.jpa.hibernate.ddl-auto: Konfiguriert das Verhalten von Hibernate in Bezug auf das Datenbank-Schema. Es kann die folgenden Werte haben:

    • none: Tut nichts. Wir verwalten das Schema der Bank manuell.
    • validieren: Validiert das Datenbank-Schema, nimmt jedoch keine Änderungen vor. Dies ist nützlich, um sicherzustellen, dass das aktuelle Schema mit den von uns zugeordneten Entitäten übereinstimmt.
    • Update: Aktualisiert das Datenbank-Schema, um Änderungen in Entitäten widerzuspiegeln.
    • create: Erstellt die Datenbank schema. Wenn das Schema bereits vorhanden ist, wird es entfernt und erneut erstellt.
    • create-drop: Erstellt das Schema aus der Datenbank und entfernt das Schema, wenn die Anwendung beendet wird. Nützlich für Tests, bei denen wir bei jedem Test eine saubere Datenbank wünschen.
  • spring.jpa.properties.hibernate.generate_statistics: Dient zum Sammeln detaillierter Informationen über Hibernate, wie z. B. Abfrageausführungszeiten, Anzahl der ausgeführten Abfragen und andere Metriken.

  • spring.jpa.properties.hibernate.connection.provider_disables_autocommit: Informiert Hibernate darüber, dass wir Auto-Commit von Anbietern deaktiviert haben (PostgreSQL, MySQL usw.). Dies wirkt sich auf die Leistung aus, da Hibernate eine Verbindung vom Pool herstellen muss, um zu wissen, ob Auto-Commit aktiviert ist oder nicht . , für jede Transaktion, die er tätigt.

Damit schließen wir den zweiten Teil des Artikels. Nicht alle vorhandenen Einstellungen betrafen die Leistung, aber diejenigen, die sich wirklich auswirken, sind die Hikari-Einstellungen wie Auto-Commit und Pool-Größe , die von JPA und Hibernate wie OSIV (Open Session In View) und informieren Sie darüber, dass wir Auto-Commit von Anbietern deaktiviert haben.

Im nächsten Teil werden wir über Ausnahmen sprechen und wie sie konfiguriert werden können, um JVM (Java Virtual Machine) Ressourcen zu sparen.

Referenzen:

  • https://en.wikipedia.org/wiki/Jakarta_Persistence
  • https://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/556
  • https://medium.com/@rafaelralf90/open-session-in-view-is-evil-fd9a21645f8e

Das obige ist der detaillierte Inhalt vonVerbesserung der Leistung von Spring Boot-Anwendungen – Teil II. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Verursacht die Sicherheitssoftware des Unternehmens, die die Anwendung nicht ausführt? Wie kann man es beheben und es lösen? Verursacht die Sicherheitssoftware des Unternehmens, die die Anwendung nicht ausführt? Wie kann man es beheben und es lösen? Apr 19, 2025 pm 04:51 PM

Fehlerbehebung und Lösungen für die Sicherheitssoftware des Unternehmens, die dazu führt, dass einige Anwendungen nicht ordnungsgemäß funktionieren. Viele Unternehmen werden Sicherheitssoftware bereitstellen, um die interne Netzwerksicherheit zu gewährleisten. ...

Wie vereinfachte ich Probleme mit der Feldzuordnung im Systemdocking mithilfe des Mapstruct? Wie vereinfachte ich Probleme mit der Feldzuordnung im Systemdocking mithilfe des Mapstruct? Apr 19, 2025 pm 06:21 PM

Die Verarbeitung von Feldzuordnungen im Systemdocken stößt häufig auf ein schwieriges Problem bei der Durchführung von Systemdocken: So kartieren Sie die Schnittstellenfelder des Systems und ...

Wie kann ich elegante Entitätsklassenvariablennamen erhalten, um Datenbankabfragebedingungen zu erstellen? Wie kann ich elegante Entitätsklassenvariablennamen erhalten, um Datenbankabfragebedingungen zu erstellen? Apr 19, 2025 pm 11:42 PM

Bei Verwendung von MyBatis-Plus oder anderen ORM-Frameworks für Datenbankvorgänge müssen häufig Abfragebedingungen basierend auf dem Attributnamen der Entitätsklasse erstellt werden. Wenn Sie jedes Mal manuell ...

Wie konvertiere ich Namen in Zahlen, um die Sortierung zu implementieren und die Konsistenz in Gruppen aufrechtzuerhalten? Wie konvertiere ich Namen in Zahlen, um die Sortierung zu implementieren und die Konsistenz in Gruppen aufrechtzuerhalten? Apr 19, 2025 pm 11:30 PM

Lösungen zum Umwandeln von Namen in Zahlen zur Implementierung der Sortierung in vielen Anwendungsszenarien müssen Benutzer möglicherweise in Gruppen sortieren, insbesondere in einem ...

Wie identifiziert Intellij IDEA die Portnummer eines Spring -Boot -Projekts, ohne ein Protokoll auszugeben? Wie identifiziert Intellij IDEA die Portnummer eines Spring -Boot -Projekts, ohne ein Protokoll auszugeben? Apr 19, 2025 pm 11:45 PM

Beginnen Sie den Frühling mit der Intellijideaultimate -Version ...

Wie kann ich Java -Objekte sicher in Arrays umwandeln? Wie kann ich Java -Objekte sicher in Arrays umwandeln? Apr 19, 2025 pm 11:33 PM

Konvertierung von Java-Objekten und -Arrays: Eingehende Diskussion der Risiken und korrekten Methoden zur Konvertierung des Guss-Typs Viele Java-Anfänger werden auf die Umwandlung eines Objekts in ein Array stoßen ...

E-Commerce-Plattform SKU und SPU-Datenbankdesign: Wie berücksichtigen Sie sowohl benutzerdefinierte Attribute als auch Attributloses Produkte? E-Commerce-Plattform SKU und SPU-Datenbankdesign: Wie berücksichtigen Sie sowohl benutzerdefinierte Attribute als auch Attributloses Produkte? Apr 19, 2025 pm 11:27 PM

Detaillierte Erläuterung des Designs von SKU- und SPU-Tabellen auf E-Commerce-Plattformen In diesem Artikel werden die Datenbankdesignprobleme von SKU und SPU in E-Commerce-Plattformen erörtert, insbesondere wie man mit benutzerdefinierten Verkäufen umgeht ...

Wie kann ich elegant den variablen Entitätsklassennamen erstellen, wenn Tkmybatis für Datenbankabfrage verwendet werden? Wie kann ich elegant den variablen Entitätsklassennamen erstellen, wenn Tkmybatis für Datenbankabfrage verwendet werden? Apr 19, 2025 pm 09:51 PM

Wenn Sie TKMybatis für Datenbankabfragen verwenden, ist das Aufbau von Abfragebedingungen ein häufiges Problem. Dieser Artikel wird ...

See all articles