Heim> Java> javaLernprogramm> Hauptteil

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

PHPz
Freigeben: 2024-08-28 06:35:06
Original
375 Leute haben es durchsucht

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

Na primeira parte deste artigo, aprendemos a como estar melhorando o desempenho das nossas aplicações, substituindo oTomcatpeloUndertow, que é um servidor web de alta performance, além de habilitar e configurar a compressão de dados, para reduzir o tamanho das respostas HTTP que trafegam pela rede.

Agora, iremos falar sobre como melhorar o desempenho de aplicação Spring Boot na parte de persistência, mas antes precisamos entender o que éJPA,HibernateeHikari.

JPA

JPA ouJava Persistence API, que posteriormente foi renomeada paraJakarta Persistence, é um padrão da linguagem Java que descreve uma interface comum paraframeworksde persistência de dados.

A especificaçãoJPAdefine o mapeamento relacional de objetos internamente, em vez de depender das implementações de mapeamento específicas do fornecedor.

Hibernate

OHibernateé um dos frameworks deORMque faz a implementação concreta da especificaçãoJPA, ou seja, se nessa especificação é descrito que é preciso de métodos parapersistir,remover,atualizarebuscar dados, quem vai de fato construir esses comportamentos é oHibernate, assim como oEclipseLink, que é outroORM.

Hikari

Hikarié um framework deconnection pooling, que é responsável pelo gerenciamento de conexões com o banco de dados, mantendo-as abertas para que possam ser reutilizadas, ou seja, é umcachede conexões para solicitações futuras, tornando o acesso ao banco de dados mais rápido e reduzindo o número de novas conexões a serem criadas.

Configurando Hikari, JPA e o Hibernate

Uma configuração que podemos estar realizando para melhorar o desempenho é a seguinte:

Usando 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
Nach dem Login kopieren

Usando 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
Nach dem Login kopieren

Agora vamos a um breve um resumo das opções:

Hikari

  • spring.datasource.hikari.auto-commit: Se for false, toda conexão que for retornada peloconnection poolvirá comauto-commitdesabilitado.

  • spring.datasource.hikari.connection-timeout: Tempo, em milissegundos, que o cliente aguardará por uma conexão dopool. É preferível configurar um tempo curto para falhar rapidamente e retornar uma mensagem de erro, em vez de manter o cliente esperando indefinidamente.

  • spring.datasource.hikari.max-lifetime: Tempo máximo que uma conexão pode permanecer ativa. Configurar esse parâmetro é crucial para evitar falhas por conexões problemáticas e aumentar a segurança, já que conexões ativas por muito tempo são mais vulneráveis a ataques.

  • spring.datasource.hikari.maximum-pool-size: Tamanho máximo dopool, incluindo conexões ociosas e em uso, determinando o número máximo de conexões ativas com o banco de dados. Se o pool atingir esse limite e não houver conexões ociosas, chamadas paragetConnection()serão bloqueadas por atéconnectionTimeoutmilissegundos antes de falharem.

    • Encontrar um valor adequado é importante, pois muitas pessoas acham que vão ter um ótimo desempenho definindo 50, 70 ou até 100. O ideal é ter 20 no máximo, que é a quantidade dethreadsem paralelo utilizando as conexões.
    • Quanto maior o valor, mais difícil vai ser para banco de dados gerenciar essas conexões e muito provavelmente não conseguiremos terthroughputsuficiente para utilizar todas essas conexões.
    • É importante entender que do ponto de vista doRDBMS(Relational Database Management System) é difícil manter uma conexão aberta com ele mesmo, imagine n quantidade de conexões.
  • spring.datasource.hikari.minimum-idle: Número mínimo de conexões que o pool mantém quando a demanda é baixa. O pool pode reduzir as conexões até 10 e recriá-las conforme necessário. No entanto, para desempenho máximo e melhor resposta a picos de demanda, é recomendado não definir esse valor, permitindo que o Hikari funcione como um pool de tamanho fixo. Padrão: igual ao spring.datasource.hikari.maximum-pool-size.

  • spring.datasource.hikari.pool-name: Nome definido pelo usuário para opoolde conexão e aparece principalmente em consoles de gerenciamento de registro eJMXpara identificarpoolse suas configurações.

JPA

  • spring.datasource.jpa.open-in-view: Quando oOSIV(Open Session In View) está ativado, uma sessão é mantida durante toda a requisição, mesmo sem a anotação @Transactional. Isso pode causar problemas de desempenho, como a falta de respostas da aplicação, pois a sessão mantém a conexão com o banco de dados até o fim da requisição.

  • spring.datasource.jpa.show-sql: Exibe o logging do SQL que está sendo executado em nossa aplicação. Geralmente deixamos ativado em desenvolvimento, mas desativado em produção.

  • spring.datasource.jpa.hibernate.ddl-auto: Configura o comportamento doHibernateem relação aoschemado banco de dados. Ela pode ter os seguintes valores:

    • none: Não faz nada. Gerenciamos manualmente o schema do banco.
    • validate: Valida oschemado banco de dados, mas não faz alterações. Isso é útil para garantir que oschemaatual esteja de acordo com as entidades que mapeamos.
    • update: Atualiza oschemado banco de dados para refletir mudanças nas entidades.
    • create: Cria oschemado banco de dados. Se oschemajá existir, ele vai remover e criar novamente.
    • create-drop: Cria oschemado banco de dados e, ao finalizar a aplicação, remove oschema. Útil para testes, onde desejamos um banco de dados limpo a cada teste.
  • spring.jpa.properties.hibernate.generate_statistics: Serve para coletar informações detalhadas sobre o Hibernate, como tempos de execução de consultas, número de consultas executadas, e outras métricas.

  • spring.jpa.properties.hibernate.connection.provider_disables_autocommit: Informa aoHibernateque desabilitamos oauto-commitdosproviders(PostgreSQL,MySQL, etc). Isso impacta no desempenho, porque oHibernateprecisará obter uma conexão dopoolpara saber se oauto-commitestá ou não está habilitado, para toda transação que ele fizer.

Com isso, fechamos a segunda parte do artigo. Nem todas as configurações presentes foram sobre desempenho, mas as que realmente impactam são as configurações doHikaricomoauto-commitepool size, as doJPAeHibernatecomoOSIV(Open Session In View) e informar que desabilitamos oauto-commitdosproviders.

Na próxima parte vamos falar sobre exceções e como elas podem ser configuradas, para poupar recursos daJVM(Java Virtual Machine).

Referências:

  • 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 vonMelhorando o desempenho de aplicações Spring Boot - Parte II. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
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
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!