Configurando um pool de conexão Hikari com inicialização por mola

Configurando um pool de conexão Hikari com inicialização por mola

1. Visão geral

Hikari é uma implementação JDBCDataSource que fornece um mecanismo de pool de conexão.

Comparado a outras implementações, ele promete ser leve ebetter performing. Para obter uma introdução ao Hikari, consultethis article.

Este tutorial rápido mostra como podemos configurar um aplicativo Spring Boot 1 ou Spring Boot 2 para usar o HikariDataSource.

Leitura adicional:

Relacionamento individual na JPA

Aprenda três maneiras diferentes de manter um relacionamento individual com a JPA.

Read more

Inicialização de mola com hibernação

Uma introdução rápida e prática à integração do Spring Boot e do Hibernate / JPA.

Read more

2. Configurando Hikari com Spring Boot 1.x

Spring Boot 1.x usaTomcat JDBC Connection Pool por padrão.

Assim que incluirmosspring-boot-starter-data-jpa em nossopom.xml, incluiremos transitivamente uma dependência para a implementação do Tomcat JDBC. Durante a execução, o Spring Boot criará um TomcatDataSource para nós usarmos.

Para configurar o Spring Boot para usar o Hikari Connection Pool, temos duas opções.

2.1. Dependência do Maven

Primeiro, precisamos incluir a dependência de Hikari em nossopom.xml:


    com.zaxxer
    HikariCP
    3.2.0

A versão mais atual pode ser encontrada emMaven Central.

2.2. Configuração explícita

A maneira mais segura de dizer ao Spring Boot para usar o Hikari é configurar explicitamente a implementação do DataSource.

Para fazer isso, simplesmenteset the property spring.datasource.type to the fully-qualified name of the DataSource implementation we want to use:

@RunWith(SpringRunner.class)
@SpringBootTest(
    properties = "spring.datasource.type=com.zaxxer.hikari.HikariDataSource"
)
public class HikariIntegrationTest {

    @Autowired
    private DataSource dataSource;

    @Test
    public void hikariConnectionPoolIsConfigured() {
        assertEquals("com.zaxxer.hikari.HikariDataSource", dataSource.getClass().getName());
    }
}

2.3. Removendo a Dependência JDBC do Tomcat

A segunda opção é permitir que o Spring Boot encontre a própria implementação HikariDataSource.

If Spring Boot cannot find the Tomcat DataSource in the classpath, it will automatically look for the Hikari DataSource next. O algoritmo de descoberta é descrito emreference manual.

Para remover o Tomcat Connection Pool do classpath, podemos excluí-lo em nossopom.xml:


    org.springframework.boot
    spring-boot-starter-data-jpa
    
        
            org.apache.tomcat
            tomcat-jdbc
         
     

Agora, o teste da seção anterior também funcionará sem configurar a propriedadespring.datasource.type.

3. Configurando Hikari com Spring Boot 2.x

No Spring Boot 2, Hikari é a implementação padrão do DataSource.

Isso é o que mudou no Spring Boot 1.x:

  • a dependência de Hikari agora é incluída automaticamente emspring-boot-starter-data-jpa

  • o algoritmo de descoberta que determina automaticamente uma implementaçãoDataSource agora prefere Hikari em vez de TomcatJDBC (consultereference manual).

Portanto, não temos nada a fazer se quisermos usar o Hikari em um aplicativo baseado no Spring Boot 2.x.

4. Ajustando os parâmetros de configuração do Hikari

Uma das vantagens do Hikari sobre outras implementações deDataSource é o fato de que ele oferece muitos parâmetros de configuração.

Podemos especificar os valores para esses parâmetros usando o prefixospring.datasource.hikarie anexando o nome do parâmetro Hikari:

spring.datasource.hikari.connectionTimeout=30000
spring.datasource.hikari.idleTimeout=600000
spring.datasource.hikari.maxLifetime=1800000
...

Uma lista de todos os parâmetros Hikari com uma boa explicação está disponível emHikari Github Site.

5. Conclusão

Neste artigo, configuramos a implementação HikariDataSource em um aplicativo Spring Boot 1.x e aprendemos como aproveitar a autoconfiguração do Spring Boot 2.x.

O código do exemplo Spring Boot 1.x está disponívelhere, e o código do exemplo Spring Boot 2.x está disponívelhere.