首页> Java> java教程> 正文

提高 Spring Boot 应用程序的性能 - 第二部分

PHPz
发布: 2024-08-28 06:35:06
原创
375 人浏览过

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 wirTomcatdurchUndertowersetzen, einen Hochleistungs-Webserver, sowie die Datenkomprimierung aktivieren und konfigurieren. um die Größe der HTTP-Antworten zu reduzieren, die über das Netzwerk übertragen werden.

Jetzt werden wir darüber sprechen, wie wir die Leistung von Spring Boot-Anwendungen im Persistenzteil verbessern können, aber zuerst müssen wir verstehen, wasJPA,HibernateundHikari.

ist

JPA

JPA oderJava Persistence API, das später inJakarta Persistenceumbenannt wurde, ist ein Java-Sprachstandard, der eine gemeinsame Schnittstelle für Datenpersistenz-Frameworksbeschreibt.

Die

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

Überwintern

Der

Hibernateist eines derORM-Frameworks, das die konkrete Umsetzung derJPA-Spezifikation ermöglicht, d,UpdateundDaten abrufen, derjenige, der diese Verhaltensweisen tatsächlich aufbaut, istHibernate, sowieEclipseLink, ein weiteresORM.Hikari

Hikari

ist einVerbindungspooling-Framework, das für die Verwaltung von Verbindungen zur Datenbank verantwortlich ist und sie offen hält, damit sie wiederverwendet werden können. Mit anderen Worten, es ist einCachevon Verbindungen für zukünftige Anfragen. Dadurch wird der Datenbankzugriff beschleunigt und die Anzahl der neu zu erstellenden Verbindungen verringert.Konfigurieren von Hikari, JPA und HibernateEine Konfiguration, die wir möglicherweise durchführen, um die Leistung zu verbessern, ist wie folgt:

Anwendung.yml 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
登录后复制
e Application.properties verwenden:


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
登录后复制
e Lassen Sie uns nun eine kurze Zusammenfassung der Optionen geben:


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 besser, eine kurze Zeitüberschreitung 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 schon lange 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 zuconnectionTimeoutMillisekunden 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 es, maximal 20 zu haben, was der Anzahl derThreads

    entspricht, die die Verbindungen parallel nutzen.
    • 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ügendDurchsatzverfügen, um alle diese Verbindungen zu nutzen.
    • Es ist wichtig zu verstehen, dass es aus der Sicht desRDBMS(
    • Relationales Datenbankverwaltungssystem
    • ) schwierig ist, eine offene Verbindung mit sich selbst aufrechtzuerhalten, stellen Sie sich n Verbindungen vor.
    • spring.datasource.hikari.minimum-idle: Mindestanzahl an 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:连接pool的用户定义名称,主要出现在注册表管理控制台和JMX中,以识别pool及其配置。

日本PA

  • spring.datasource.jpa.open-in-view:启用OSIV在视图中打开会话)时,即使没有 @Transactional 注释,也会在整个请求过程中维护会话。这可能会导致性能问题,例如缺乏应用程序响应,因为会话会保持与数据库的连接直到请求结束。

  • spring.datasource.jpa.show-sql:显示我们的应用程序中正在执行的 SQL 日志记录。我们通常在开发中启用它,但在生产中禁用它。

  • spring.datasource.jpa.hibernate.ddl-auto:配置Hibernate与数据库schema相关的行为。它可以具有以下值:

    • 无:不执行任何操作。我们手动管理银行架构。
    • validate:验证数据库schema,但不进行任何更改。这对于确保当前模式与我们映射的实体一致很有用。
    • 更新:更新数据库schema以反映实体的更改。
    • create:创建数据库schema。如果schema已经存在,它将删除并重新创建。
    • create-drop:从数据库创建schema,并在应用程序完成时删除schema。对于测试很有用,我们希望每次测试都有一个干净的数据库。
  • spring.jpa.properties.hibernate.generate_statistics:用于收集有关 Hibernate 的详细信息,例如查询执行时间、执行的查询数量和其他指标。

  • spring.jpa.properties.hibernate.connection.provider_disables_autocommit:通知Hibernate我们已禁用providersPostgreSQLMySQL等)的自动提交。这会影响性能,因为Hibernate将需要从获取连接,以了解自动提交对于它所做的每笔事务是否启用。

至此,我们结束了文章的第二部分。并非所有设置都与性能有关,但真正影响性能的是Hikari设置,例如自动提交池大小JPAHibernate设置,例如OSIV在视图中打开会话)并通知您我们已禁用提供者自动提交

在下一部分中,我们将讨论异常以及如何配置它们,以节省JVMJava虚拟机)的资源。

参考资料:

  • 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

以上是提高 Spring Boot 应用程序的性能 - 第二部分的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!