[Spring] 커넥션 풀(Connection Pool) HikariCP, Java로 설정하기
제 지난 글에서 HikariCP 라이브러리를 root-context.xml 파일로 설정하는 방법에 대해서 다뤘었습니다. 먼저 지난 글을 보시고, 이 글을 보시는 것을 추천합니다.
지난 글
https://lifere.tistory.com/114
지난 글에서 커넥션 풀에 대해 위키 백과의 글을 빌려와 설명하여 생략합니다.
보통 스프링으로 프로젝트를 할 때 xml로 DB Connection 등의 설정을 하는데, 이번에는 Java 소스 파일로 설정하는 방법에 대해 알아보도록 하겠습니다.
1. HikariCP 라이브러리 설치
먼저 HikariCP 라이브러리를 설치해야 해당 라이브러리를 설치할 수 있습니다.
pom.xml 에서 <dependency> HikariCP 를 추가합니다.
<!-- https://mvnrepository.com/artifact/com.zaxxer/HikariCP -->
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>4.0.3</version>
</dependency>
해당 프로젝트의 Maven Library에 HikariCP.jar 파일이 다운로드되어 등록됩니다.
2. Java로 HikariCP 세팅
root-context.xml 파일을 대신하는 RootConfig 클래스로 HikariCP DataSource를 설정합니다. XML에서 <bean> 태그로 설정했던 역할을 @Bean을 이용해 한다고 생각하면 됩니다. @Bean이 선언된 메서드의 실행 결과로 반환된 객체는 스프링의 객체(Bean)로 등록됩니다.
1) oracle 설정 버전
package com.project.config;
import javax.sql.DataSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
@Configuration
@ComponentScan(basePackages = {"com.project.sample"})
public class RootConfig {
@Bean
public DataSource dataSource() {
HikariConfig hikariConfig = new HikariConfig();
hikariConfig.setDriverClassName("oracle.jdbc.driver.OracleDriver");
hikariConfig.setJdbcUrl("jdbc:oracle:thin@localhost:1521:XE");
hikariConfig.setUsername("username");
hikariConfig.setPassword("password");
HikariDataSource dataSource = new HikariDataSource(hikariConfig);
return dataSource;
}
}
2) mariadb 설정 버전
제가 mariadb를 사용하고 있어서 mariadb 설정도 넣었습니다.
package com.project.config;
import javax.sql.DataSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
@Configuration
@ComponentScan(basePackages = {"com.project.sample"})
public class RootConfig {
@Bean
public DataSource dataSource() {
HikariConfig hikariConfig = new HikariConfig();
hikariConfig.setDriverClassName("org.mariadb.jdbc.Driver");
hikariConfig.setJdbcUrl("jdbc:mariadb://{host address}/{db}");
hikariConfig.setUsername("username");
hikariConfig.setPassword("password");
HikariDataSource dataSource = new HikariDataSource(hikariConfig);
return dataSource;
}
}
3. Test 클래스 작성해서 테스트 하기
테스트 클래스 작성하고, JUnit으로 테스트합니다.
package com.project.persistence;
import static org.junit.Assert.fail;
import java.sql.Connection;
import javax.sql.DataSource;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import com.project.config.RootConfig;
import lombok.Setter;
import lombok.extern.log4j.Log4j;
@RunWith(SpringJUnit4ClassRunner.class)
//@ContextConfiguration("file:src/main/webapp/WEB-INF/spring/root-context.xml")
@ContextConfiguration(classes = {RootConfig.class}) // Java 설정
@Log4j
public class DataSourceTests {
@Setter(onMethod_ = { @Autowired })
private DataSource dataSource;
@Test
public void testConnection() {
try (Connection con = dataSource.getConnection()){
log.info(con);
} catch (Exception e) {
// TODO Auto-generated catch block
fail(e.getMessage());
}
}
}
테스트 코드를 실행합니다.
테스트 코드는 스프링에 빈(Bean)으로 등록된 DataSource를 이용해 Connection을 제대로 처리할 수 있는지를 확인해 보는 용도입니다.
실행결과
아직 브라우저에서 최종 결과를 확인하진 못하고 추가 설정을 더 해야 합니다. 관련 내용은 다음 포스팅에서 다루겠습니다.
오늘은 HikariCP를 Java로 설정하는 방법과 JUnit으로 테스트하는 방법에 대해 알아봤습니다.
'java, spring' 카테고리의 다른 글
[Spring] 스프링 mybatis 연동 후 실행되는 SQL 구문 로그로 출력하기, log4jdbc-log4j2 설정 (0) | 2021.05.16 |
---|---|
[Spring] MyBatis와 스프링 연동하기 1편 (0) | 2021.05.15 |
Spring Project에 Connection Pool 설정하기 feat.HikariCP (2) | 2021.05.13 |
스프링 프레임워크 @AllArgsConstructor, @RequiredArgsConstructor Annotation (0) | 2021.05.08 |
Illegal reflective access by org.springframework.cglib.core.ReflectUtils$1 Warning Message 해결 (0) | 2021.05.08 |