환경 : Spring Boot 3, HikariCP
Spring Boot 에서 DBCP 의 Connection Pool 에서 풀 안의 커넥션이 유효한지에 대한 쿼리문을 날리는데
그게 ValidationQuery 이다.
해당 쿼리문의 시간을 설정하고 로그로 확인하기 위해 작성하는 글이다.
1. pom.xml 에 log4j2 dependency 추가하기
<!--2.1 logging -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
2. Spring Boot 기본 logback 제외하기
Spring Boot 의 기본 log 라이브러리인 logback 을 제외시킨다.
<!-- Logback 제거 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
3. application.yml 에 HikariCP 설정하기
spring:
profiles:
active: local
thymeleaf:
cache: false
prefix: classpath:templates/
suffix: .html
datasource:
hikari:
driver-class-name: com.mysql.cj.jdbc.Driver
jdbc-url: jdbc:mysql://192.168.56.1:3306/db명
username: ****
password: ****
maximum-pool-size: 10
validation-timeout: 5000
connection-test-query: SELECT 1
설정값 |
설명 |
maximum-pool-size : 10 |
최대 pool 개수 |
validation-timeout: 5000 |
커넥션이 유효한지 검사할 때 최대 대기 시간 |
connection-test-query: SELECT 1 |
validationquery 유효 쿼리문 |
4. log4j2.xml 설정하기
src/main/resources 하위에 log4j2.xml 파일을 생성한다.
classpath 경로에 파일을 생성하면 자동설정된다.
log4j2.xml
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
</Appenders>
<Loggers>
<!-- HikariCP 로그 -->
<Logger name="com.zaxxer.hikari" level="DEBUG" additivity="false">
<AppenderRef ref="Console"/>
</Logger>
<!-- Connection validation 관련 로그 (DriverManager 등 포함 가능) -->
<Logger name="java.sql" level="DEBUG" additivity="false">
<AppenderRef ref="Console"/>
</Logger>
<!-- 전체 root 로그 설정 -->
<Root level="INFO">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>
이렇게 30초마다 validation query문을 날려 connection pool 의 connection 이 유효한지 체크한다.