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.
JPAJava 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
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
zurückgegebene Verbindung mit deaktiviertem Auto-Commit geliefert.
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.
, 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 derspring.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.
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:
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:
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!