DataSource 예제2- 커넥션 풀

Minseo Kang·2023년 3월 28일
0
post-thumbnail

01. Connection Test - 데이터소스 커넥션 풀 추가


  • HikariCP 커넥션 풀 사용, HikariDataSourceDataSource 인터페이스를 구현
  • 커넥션 풀 최대 사이즈를 10으로 지정, 풀의 이름을 MyPool 이라고 지정
  • 커넥션 풀에서 커넥션을 생성하는 작업은 애플리케이션 실행 속도에 영향을 주지 않기 위해 별도의 쓰레드에서 작동
  • 별도의 쓰레드에서 동작하기 때문에 테스트가 먼저 종료됨
  • Thread.sleep로 대기 시간 주어야 쓰레드 풀에 커넥션이 생성되는 로그 확인 가능

@Test
void dataSourceConnectionPool() throws SQLException, InterruptedException {

	// 커넥션 풀링
	HikariDataSource dataSource = new HikariDataSource();
	dataSource.setJdbcUrl(URL);
	dataSource.setUsername(USERNAME);
	dataSource.setPassword(PASSWORD);
	dataSource.setMaximumPoolSize(10);
	dataSource.setPoolName("MyPool");

	useDataSource(dataSource);
	Thread.sleep(1000);

}

private void useDataSource(DataSource dataSource) throws SQLException {
	Connection con1 = dataSource.getConnection();
	Connection con2 = dataSource.getConnection();
	log.info("--- use DriverManagerDataSource ---");
	log.info("connection={}, class={}", con1, con1.getClass());
	log.info("connection={}, class={}", con2, con2,getClass());
	Assertions.assertThat(con1).isNotNull();
	Assertions.assertThat(con2).isNotNull();
}

실행 결과




02. 실행 결과 분석


HikariConfig

  • HikariCP 관련 설정을 확인할 수 있음
  • 풀의 이름(MyPool)과 최대 풀 수(10)을 확인할 수 있음

MyPool connection adder

  • 별도의 쓰레드를 사용해서 커넥션 풀에 커넥션을 채움
  • 이 쓰레드는 커넥션 풀에 커넥션을 최대 풀 수(10)까지 채움

별도의 쓰레드를 사용해서 커넥션 풀에 커넥션을 채우는 이유

  • 커넥션 풀에 커넥션을 채우는 것은 상대적으로 오래 걸리는 일임
  • 애플리케이션을 실행할 때 커넥션 풀을 채울 때 까지 기다리고 있으면 애플리케이션 실행 시간이 늦어짐
  • 별도의 쓰레드를 사용해서 커넥션 풀을 채워야 애플리케이션 실행 시간에 영향을 주지 않음

커넥션 풀에서 커넥션 획득

  • 커넥션 풀에서 커넥션을 2개 획득하고 반환하지는 않았음
  • 따라서 풀에 있는 10개의 커넥션 중 2개를 가지고 있는 상태
  • 마지막 로그를 보면 active=2, 풀에서 대기 상태인 커넥션 idle=8을 확인할 수 있음

0개의 댓글