728x90
반응형
Spring Boot에서 HikariCP 커넥션 풀을 직접 설정하고, 초기 커넥션 풀을 미리 생성(preload) 하도록 구성하려면 DataSourceConfig.java에서 HikariDataSource를 수동으로 생성하는 방식이 필요하다.
[SpringBoot] DataSourceConfig.java 설정 및 역할
DataSourceConfig.java의 역할은 Spring Boot 애플리케이션에서 DB 연결 정보(DataSource)를 커스터마이징하고 관리하는 설정 클래스 입니다. application.yml(properties) 로 설정하면 되지 않나? 라고 생각 할 수도
bears-paw.tistory.com
나는 보통 egovframework/spring/context-datasource.xml 파일에 bean등록해서 커넥션 정보를 등록했었다.
springboot에서는 Java 코드 기반 설정을 내가 채택했으므로 DataSourceConfig.java 에 커넥션 정보를 등록하는 거다.
Spring Boot 기반이거나, 성능이 중요한 시스템에서는 HikariCP 사용을 추천하고 별도에 이유가 없으면 Hikari를 사용한다.
커낵션 설정 방법
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import org.springframework.context.annotation.*;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import javax.sql.DataSource;
@Configuration
@EnableTransactionManagement
public class DataSourceConfig {
@Bean
@Profile("mySql")
@Primary
public DataSource h2HikariDataSource() {
HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:mysql://localhost:3306/simpleboard?useSSL=false&serverTimezone=Asia/Seoul");
config.setUsername("your_user");
config.setPassword("your_password");
config.setDriverClassName("com.mysql.cj.jdbc.Driver");
// 💡 커넥션 풀 설정
config.setMaximumPoolSize(20); // 최대 커넥션 수
config.setMinimumIdle(5); // 최소 커넥션 수
config.setIdleTimeout(300000); // 유휴 커넥션 timeout (ms)
config.setConnectionTimeout(30000); // 커넥션 얻기 대기 시간 (ms)
config.setMaxLifetime(1800000); // 커넥션 최대 생존 시간 (ms)
// ✅ 커넥션 풀을 미리 생성하도록 설정
config.setInitializationFailTimeout(-1); // 초기화 시 실패하면 예외 발생 (-1은 무제한 대기)
config.setPoolName("HikariPool-SimpleBoard");
HikariDataSource dataSource = new HikariDataSource(config);
// 💡 초기 커넥션을 미리 확보하려면 다음 코드 실행 (강제 preload)
try {
for (int i = 0; i < config.getMinimumIdle(); i++) {
dataSource.getConnection().close();
}
} catch (Exception e) {
throw new RuntimeException("Failed to preload Hikari connections", e);
}
return dataSource;
}
}
egov에서 커넥션 설정했던 예시
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 커넥션 풀 설정 (예: Apache Commons DBCP2) -->
<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="oracle.jdbc.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@localhost:1521:xe"/>
<property name="username" value="egov"/>
<property name="password" value="egovpass"/>
<!-- 커넥션 풀 설정 -->
<property name="initialSize" value="5"/> <!-- 초기 커넥션 수 -->
<property name="maxTotal" value="20"/> <!-- 최대 커넥션 수 -->
<property name="maxIdle" value="10"/> <!-- 최대 유휴 커넥션 수 -->
<property name="minIdle" value="2"/> <!-- 최소 유휴 커넥션 수 -->
<property name="maxWaitMillis" value="10000"/> <!-- 커넥션 획득 대기 시간 -->
</bean>
<!-- 트랜잭션 매니저 설정 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
</beans>
728x90
반응형
'프로그래밍 > Spring' 카테고리의 다른 글
[SpringBoot] Lombok @Getter 등 어노테이션 인식이 안되는 현상 해결 (0) | 2025.06.22 |
---|---|
[JPA] JPA 기본 어노테이션 정리 (0) | 2025.06.22 |
[SpringBoot] DataSourceConfig.java 설정 및 역할 (0) | 2025.06.22 |
[SpringBoot] Spring Boot Dashboard가 안 보임. (0) | 2025.06.22 |
[Spring Boot] SpringBoot Project Import 방법 (0) | 2025.06.22 |
댓글