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.HikariDataSource
spring.datasource.hikari.minimumIdle=5
spring.datasource.hikari.maximumPoolSize=20
spring.datasource.hikari.idleTimeout=30000
spring.datasource.hikari.poolName=SpringBootJPAHikariCP
spring.datasource.hikari.maxLifetime=2000000
spring.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();
}
@Bean
public DataSource dataSource() {
DataSource dataSource = new HikariDataSource(hikariConfig());
System.out.println("DataSource connection" + dataSource.toString());
return dataSource;
}
@Bean
public 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();
}
@Bean
public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) throws Exception {
final SqlSessionTemplate sqlSessionTemplate = new SqlSessionTemplate(sqlSessionFactory);
return sqlSessionTemplate;
}
@Bean
public DataSourceTransactionManager transactionManager(){
DataSourceTransactionManager manager = new DataSourceTransactionManager(dataSource());
return manager;
}
}
HikariConfig 클래스를 사용하여 DataSource를 연결합니다.
- SpringBoot 실행
콘솔에 System.out.println 으로 로그를 삽입해두었는데 커넥션 풀 네임으로 정의한 SpringBootJPAHikariCP DataSource가 정상적으로 연결된 것으로 보이네요.