首页  >  文章  >  Java  >  提高 Spring Boot 应用程序的性能 - 第二部分

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

PHPz
PHPz原创
2024-08-28 06:35:06597浏览

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

在本文的第一部分中,我们学习了如何提高应用程序的性能,将 Tomcat 替换为 Undertow,即高性能 Web 服务器,除了启用和配置数据压缩之外,还可以减少通过网络传输的 HTTP 响应的大小。

现在,我们将讨论如何在持久化部分提高 Spring Boot 应用程序的性能,但首先我们需要了解什么是 JPAHibernateHikari.

日本PA

JPA 或 Java Persistence API,后来更名为 Jakarta Persistence,是一个 Java 语言标准,描述了一个通用的数据持久化框架的接口。

JPA 规范 在内部定义对象关系映射,而不是依赖于特定于供应商的映射实现。

休眠

HibernateORM 框架之一,它具体实现了 JPA 规范,换句话说,如果此规范描述了需要 persistremoveupdatefetch data 方法,那么谁将实际上构建这些行为的是 Hibernate,以及 EclipseLink,这是另一个 ORM .

Hikari是一个连接池框架,它负责管理与数据库的连接,保持它们打开以便可以重用,即,它是用于未来请求的连接缓存,可以更快地访问数据库并减少要创建的新连接的数量。

配置 Hikari、JPA 和 Hibernate

我们可能为提高性能而执行的配置如下:

使用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

使用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

现在让我们简要总结一下选项:

  • spring.datasource.hikari.auto-commit:如果为 false,连接池返回的每个连接都将禁用 自动提交

  • spring.datasource.hikari.connection-timeout:客户端等待来自的连接的时间(以毫秒为单位)。最好设置一个较短的超时以快速失败并返回错误消息,而不是让客户端无限期地等待。

  • spring.datasource.hikari.max-lifetime:连接可以保持活动状态的最长时间。配置此参数对于避免由于连接问题而导致失败并提高安全性至关重要,因为长时间处于活动状态的连接更容易受到攻击。

  • spring.datasource.hikari.maximum-pool-size:的最大大小,包括空闲和使用中的连接,确定数据库的最大活动连接数。如果池达到此限制并且没有空闲连接,则对 getConnection() 的调用将在失败之前阻塞最多 connectionTimeout 毫秒。

    • 找到一个合适的值很重要,因为很多人认为设置 50、70 甚至 100 会获得很好的性能。理想的是最大为 20,这是线程数使用连接并行。
    • 值越高,数据库管理这些连接就越困难,并且很可能我们将无法拥有足够的吞吐量来使用所有这些连接。
    • 重要的是要理解,从RDBMS关系数据库管理系统)的角度来看,维持与其自身的开放连接是很困难的,想象一下n个连接。
  • spring.datasource.hikari.minimum-idle:需求较低时池维持的最小连接数。该池最多可以减少 10 个连接,并根据需要重新创建它们。但是,为了获得最佳性能并更好地响应需求峰值,建议不要设置此值,从而允许 Hikari 作为固定大小池运行。默认值:与 spring.datasource.hikari.maximum-pool-size 相同。

  • spring.datasource.hikari.pool-name:连接 pool 的用户定义名称,主要出现在注册表管理控制台和 JMX 中以标识 及其设置。

日本专业协会

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

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

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

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

  • spring.jpa.properties.hibernate.connection.provider_disables_autocommit:通知Hibernate我们已禁用提供者的自动提交 PostgreSQLMySQL等)。这会影响性能,因为 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn