[백업][가리사니] 스프링 hikaricp (커넥션풀) 적용
java, jdbc, mysql, spring

이 문서는 가리사니 개발자 포럼에 올렸던 글의 백업 파일입니다. 오래된 문서가 많아 현재 상황과 맞지 않을 수 있습니다.

히카리 커넥션풀은 빠른 속도로인해 점점 더 주목받고 있는 커넥션풀입니다. https://github.com/brettwooldridge/HikariCP 위 주소에서 참고해 보실 수 있습니다.

0. 준비

저번 강의인 스프링 JPA 에서 다중 DB 사용하기 와 중복되는 부분이 많다보니 해당 강의에 나오는 부분들은 전부 생략하도록 하겠습니다. 스프링 JPA 에서 다중 DB 사용하기 /2016/06/27/%EB%B0%B1%EC%97%85-%EA%B0%80%EB%A6%AC%EC%82%AC%EB%8B%88-%EC%8A%A4%ED%94%84%EB%A7%81-%EC%97%AC%EB%9F%AC%EA%B0%9C%EC%9D%98-JPA-(-hibernate-mysql,-postgresql-%EC%98%88%EC%A0%9C-)-%EC%97%B0%EA%B2%B0.html

1. pom.xml 설정

<dependency>
	<groupId>com.zaxxer</groupId>
	<artifactId>HikariCP</artifactId>
	<version>2.4.6</version>
</dependency>

2. properties 작성

Hikari 사이트에서도 볼 수 있지만 직접 설정할 수도 있고 여러가지 방법들이 있다보니 굳이 properties 에 작성해야하는 것은 아니지만, 필자는 설정들을 소스에 하드코딩하는 것이 아닌 파일이나 DB로 가지고있는 것을 선호하기 때문에 파일로 만들어보도록 하겠습니다. application.properties 가 있는 폴더에 HikariMySQL.properties 을 만들고 아래와 같이 적습니다. (MySQL을 예로 들었습니다.)

# 데이터소스 클래스 위치 (드라이버가 아닙니다.!!)
dataSourceClassName=com.mysql.jdbc.jdbc2.optional.MysqlDataSource
# 접속 url
dataSource.url=jdbc:mysql://<호스트>:<포트>/<db명>?useSSL=true&useUnicode=yes&characterEncoding=utf-8
dataSource.user=<계정>
dataSource.password=<암호>
# 옵션들
dataSource.cachePrepStmts=true
dataSource.prepStmtCacheSize=100
dataSource.prepStmtCacheSqlLimit=2048
dataSource.useServerPrepStmts=true
maximumPoolSize=10

각종 옵션은 아래 주소에서 확인 할 수 있습니다. https://github.com/brettwooldridge/HikariCP/wiki/Configuration

3. 연결 설정

  • DataSource 를 만드는 부분이 이전강의와 다릅니다.
  • 여기서는 HikariMySQL.properties 를 통해 설정파일을 불러오고 있습니다.
  • 설정을 소스로 사용하거나 수동으로 넣어주고싶으신분들은 conf.load 대신 conf 에 직접 넣어주시면 됩니다. (공식사이트 참고)
@Configuration
@EnableJpaRepositories
(
	basePackages = "com.web.repository.mysql",
	entityManagerFactoryRef = "mysqlFactoryBean",
	transactionManagerRef = "mysqlTransactionManager"
)
public class JdbcMysqlConfig
{
	@Bean(name = "mysqlDataSource")
	public DataSource getDataSource() throws IOException
	{
		Properties conf = new Properties();
		conf.load(DataSourceFactory.class.getClassLoader().getResourceAsStream("HikariMySQL.properties"));
		return new HikariDataSource(new HikariConfig(conf));
	}

	@Bean(name = "mysqlFactoryBean")
	public LocalContainerEntityManagerFactoryBean getFactoryBean(EntityManagerFactoryBuilder builder) throws IOException
	{
		return builder.dataSource(getDataSource()).packages("com.web.domain.mysql").build();
	}

	@Bean(name = "mysqlTransactionManager")
	PlatformTransactionManager getTransactionManager(EntityManagerFactoryBuilder builder) throws IOException
	{
		return new JpaTransactionManager(getFactoryBean(builder).getObject());
	}
}

실행

실행시에 아래와 같은 문구가 나오면 연결성공

  • 시작 HikariPool-<번호> - Started.
  • 등록 Located MBean <DataSource빈이름>: registering with JMX server as MBean [com.zaxxer.hikari:name=<DataSource빈이름>,type=HikariDataSource] 이전 강의처럼 적당히 해당 패키지에 넣어서 처리하는 식으로 코드를 짠 후 작동시키면됩니다.