Verbesserung der Leistung von Spring Boot-Anwendungen – Teil 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.
JPAJPA 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.
DieJPA-Spezifikation definiert die objektrelationale Zuordnung intern, anstatt sich auf herstellerspezifische Zuordnungsimplementierungen zu verlassen.
ÜberwinternHibernate 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:
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
- 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. -
- 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!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

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

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

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. ...

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 ...

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 ...

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 ...

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

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 ...

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 ...

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