Configuring Tomcat Connection pool and Hikari Connection pool in Spring Boot

One key component of spring boot starter dependencies is spring-boot-starter-data-JPA. This allows us to use JPA and work with production databases by using some popular JDBC connection pooling implementations, such as HikariCP and Tomcat JDBC Connection Pool.
Tomcat Connection Pooling
Spring Boot will look for HikariCP on the classpath and use it by default when present
To configure a Tomcat JDBC connection pool instead of the default HikariCP, we'll exclude HikariCP from the spring-boot-starter-data-jpa dependency and add the tomcat-jdbc Maven dependency to our 

pom.xml:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<exclusions>
<exclusion>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-jdbc</artifactId>
</dependency>

For optimizing its performance we can add additional properties 

#connection pooling 
spring.datasource.tomcat.initial-size=10
spring.datasource.tomcat.max-wait=15000
spring.datasource.tomcat.max-active=40
spring.datasource.tomcat.max-idle=15
spring.datasource.tomcat.min-idle=8
spring.datasource.tomcat.default-auto-commit=true 

Please notice that we've configured a few additional connection pooling properties, such as the pool's initial size, and the maximum and a minimum number of idle connections.

How to know which connection pool is used?
@EnableJpaRepositories(basePackages = "com.knowledgefactory.Repository")
@SpringBootApplication
@ComponentScan({ "com" })
@EntityScan("com.knowledgefactory.Entity")
public class KnowledgefactorydemoApplication implements CommandLineRunner {
@Autowired
private UserRepository repository;
@Autowired
private DataSource dataSource;

public static void main(String[] args) {
SpringApplication.run(KnowledgefactorydemoApplication.class, args);
}

@Override
public void run(String... args) throws Exception {
System.out.println("DATASOURCE = " + dataSource);
repository.save(new User("Knf"));
repository.save(new User("sibin"));
}

Start  Spring boot application 
In your console System will print,
         "DATASOURCE = class org.apache.tomcat.jdbc.pool.DataSource"

Hikari Connection Pooling
Spring Boot will look for HikariCP on the classpath and use it by default when present

    <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

One of Hikari's advantages over other DataSource implementations is the fact that it offers a lot of configuration parameters.
We can specify the values for these parameters by using the prefix spring.datasource.hikari and appending the name of the Hikari parameter:
For optimizing its performance we can add additional properties 

spring.datasource.hikari.connection-timeout=60000
spring.datasource.hikari.maxLifetime=1700000
spring.datasource.hikari.maximum-pool-size=5

How to know which connection pool is used?
@EnableJpaRepositories(basePackages = "com.knowledgefactory.Repository")
@SpringBootApplication
@ComponentScan({ "com" })
@EntityScan("com.knowledgefactory.Entity")
public class KnowledgefactorydemoApplication implements CommandLineRunner {
@Autowired
private UserRepository repository;
@Autowired
private DataSource dataSource;

public static void main(String[] args) {
SpringApplication.run(KnowledgefactorydemoApplication.class, args);
}

@Override
public void run(String... args) throws Exception {
System.out.println("DATASOURCE = " + dataSource);
repository.save(new User("Knf"));
repository.save(new User("sibin"));
}

Start  Spring boot application 
In console System will print,
"DATASOURCE = class com.zaxxer.hikari.HikariDataSource"

Comments