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 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.
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é 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.
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
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
Agora vamos a um breve um resumo das opções:
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.
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.
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:
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:
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!