O gerenciamento de conexões nos bancos de dados relacionais é algo que começamos a ter preocupação conforme nossos sistemas começam a crescer, onde em cenário que não usamos servidores de aplicações (como: Jboss/Wildfly, Glassfish, Websphere), os frameworks são responsável por essa tarefa de abertura e fechamento das conexões.
A diversos frameworks que disponibilizam funcionalidades para esse gerenciamento, porém nem sempre a solução do framework pode ser a mais performática para nossas aplicações, pois há diferente soluções de gerenciamento de conexões no mercado, por exemplo: Hibernate, c3p0, Tomcat e Hikari.
Observação: No Spring Boot, quando utilizado o Tomcat, o gerenciamento de conexões padrão é do próprio Tomcat (tomcat-jdbc).
Atualmente o Hikari CP apresenta um excelente desempenho nesse papel, onde tem uma proposta de “de um sólido gerenciador de conexão JDBCs de alto desempenho”, até mesmo recomendado na própria DOC do Spring Boot “Preferimos o HikariCP por sua performance e simultaneidade”.
Observação: No Spring Boot 2.0, o Hikari passará a ser padrão de ferramenta de gerenciamento de conexões com bancos relacionas, nas dependências do jpa-starter.
Na imagem abaixo, um benchmark apresentado no site da Hikari demostrando diferença de performance do tratamento de conexões do Hikari comparado com outras opções:

- One Connection Cycle: É definido por uma abertura/fechamento de conexão (DataSource.getConnection()/Connection.close();
- One Statement Cycle: É definido por um “Statment” (Connection.prepareStatement(), Statement.execute(), Statement.close()).
Utilizando Hikari no Spring Boot
Para ativar o Hikari no Spring Boot, basta adicionar a dependência no projeto e mudar o datasource type como demostrado abaixo:
pom.xml
<dependency> <groupId>com.zaxxer</groupId> <artifactId>HikariCP</artifactId> <version>2.7.7</version> </dependency>
application.properties
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
Estudo de caso
Fazendo um comparativo na prática do Hikari e o gerenciador de conexões do Tomcat(padrão do Spring Boot), foram obtidas os seguintes resultados:
O escopo de teste é de lançar 5 consultas em paralelo em um loop de 1000 vezes, aguardando até que todos execuções sejam finalizadas, no final totalizando o tempo de execução das instruções.
O mesmo cenário foi executado 3x com cada driver:
Tomtcat:
DefaultSourceTest: DataSource: org.apache.tomcat.jdbc.pool.DataSource@5d497a91{} PerformanceUseCase: 37995 milis
DefaultSourceTest: DataSource: org.apache.tomcat.jdbc.pool.DataSource@5d497a91{} PerformanceUseCase: 36531 milis
DefaultSourceTest: DataSource: org.apache.tomcat.jdbc.pool.DataSource@51ec2856{} PerformanceUseCase: 36467 milis
média: 36998 milis = 37 segundos
Hikari:
HikariSourceTest: DataSource: HikariDataSource (HikariPool-1) PerformanceUseCase: 34688 milis
HikariSourceTest: DataSource: HikariDataSource (HikariPool-1) PerformanceUseCase: 32946 milis
HikariSourceTest: DataSource: HikariDataSource (HikariPool-1) PerformanceUseCase: 33293 milis
média: 33642 milis = 34 segundos
Concluindo, apenas trocando o driver de gerenciamento de conexões foi obtido um resultado de 3 segundos diferença, onde quando utilizado o driver do Hikari no caso de uso acima, o processo total foi executado em média geral 3 segundos a menos em uma análise de 3 amostragens, assim proporcionando um ganho significando no tempo de execução sem alterações de código.
Os testes foram executados no bando de dados PostgreSQL na versão 9.6, Java 8 (build: 1.8.0_131), sistema operacional macOS Sierra, com o hardware: Processador 2,6 GHz, 16GB de memória e HD SSD.
O código fonte dos testes está disponível no github.