이 문서는 가리사니 개발자 포럼에 올렸던 글의 백업 파일입니다. 오래된 문서가 많아 현재 상황과 맞지 않을 수 있습니다.
히카리 커넥션풀은 빠른 속도로인해 점점 더 주목받고 있는 커넥션풀입니다. 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
: registering with JMX server as MBean [com.zaxxer.hikari:name= ,type=HikariDataSource] 이전 강의처럼 적당히 해당 패키지에 넣어서 처리하는 식으로 코드를 짠 후 작동시키면됩니다.