Spring Boot + DataSource hikariCP 커넥션 풀

Spring Boot Datasource hikariCP 커넥션풀 사용하기
이전 글에서는 SpringBoot + JDBC를 통해 Mybatis Datasource를 연동했었는데요.
성능면에서 더 우월하다는 hikari Connection Pool을 활용해서 DataSource 연동을 해보려고 합니다.
이미 SpringBoot + Mybatis 로 DataSource를 연동하셨다면 설정에서 조금만 변경하셔도 사용이 가능 합니다.
Application.proerties 파일에서 hikari 옵션을 추가합니다.
spring.datasource.type=com.zaxxer.hikari.HikariDataSourcespring.datasource.hikari.minimumIdle=5spring.datasource.hikari.maximumPoolSize=20spring.datasource.hikari.idleTimeout=30000spring.datasource.hikari.poolName=SpringBootJPAHikariCPspring.datasource.hikari.maxLifetime=2000000spring.datasource.hikari.connectionTimeout=30000
spring.datasource.hikari.minimumIdle : 풀에 유지할 최소 커넥션 갯수를 정의합니다.
spring.datasource.hikari.maximumPoolSize : 유휴 상태와 사용중인 커넥션을 포함해서 풀이 허용하는 최대 커넥션 갯수를 설정합니다.
spring.datasource.hikari.idleTimeout : 커넥션이 풀에서 유휴상태로 남을 수 있는 최대 시간을 밀리초단위로 지정합니다.
spring.datasource.hikari.poolName : 커넥션 풀 네임 지정
spring.datasource.hikari.maxLifetime : 커넥션의 최대 유지시간을 밀리초 단위로 설정합니다. 이 시간이 지난 커넥션중에서 사용중인 커넥션은 종료된 이후에 풀에서 제거합니다.
spring.datasource.hikari.connectionTimeout : 풀에서 커넥션을 구할 때 대기시간을 밀리초 단위로 지정합니다. 대기 시간 안에 구하지 못하면 익셉션 발생.
DatabaseConfiguration.java
package com.project.config;import javax.sql.DataSource;import org.apache.ibatis.session.SqlSessionFactory;import org.mybatis.spring.SqlSessionFactoryBean;import org.mybatis.spring.SqlSessionTemplate;import org.springframework.boot.context.properties.ConfigurationProperties;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.context.annotation.PropertySource;import org.springframework.core.io.support.PathMatchingResourcePatternResolver;import org.springframework.jdbc.datasource.DataSourceTransactionManager;import com.zaxxer.hikari.HikariConfig;import com.zaxxer.hikari.HikariDataSource;@Configuration@PropertySource("classpath:/application.properties")public class DatabaseConfiguration {@Bean@ConfigurationProperties(prefix="spring.datasource.hikari")public HikariConfig hikariConfig() {return new HikariConfig();}@Beanpublic DataSource dataSource() {DataSource dataSource = new HikariDataSource(hikariConfig());System.out.println("DataSource connection" + dataSource.toString());return dataSource;}@Beanpublic SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();sessionFactory.setDataSource(dataSource());PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();sessionFactory.setMapperLocations(resolver.getResources("classpath:/mapper/**/*.xml"));return sessionFactory.getObject();}@Beanpublic SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) throws Exception {final SqlSessionTemplate sqlSessionTemplate = new SqlSessionTemplate(sqlSessionFactory);return sqlSessionTemplate;}@Beanpublic DataSourceTransactionManager transactionManager(){DataSourceTransactionManager manager = new DataSourceTransactionManager(dataSource());return manager;}}
HikariConfig 클래스를 사용하여 DataSource를 연결합니다.
- SpringBoot 실행

콘솔에 System.out.println 으로 로그를 삽입해두었는데 커넥션 풀 네임으로 정의한 SpringBootJPAHikariCP DataSource가 정상적으로 연결된 것으로 보이네요.



