Spring Boot DataSource
TMT1. 기본 HikariCP 사용 & 자동 구성
- ✅ 사실 확인:
Spring Boot 2.x 이상에서는 HikariCP가 기본 커넥션 풀입니다.spring.datasource.url
,username
,password
만 설정하면 자동으로DataSource
빈이 등록됩니다.- 별도의
DataSource
빈을 정의하지 않아도 됩니다. - HikariCP의 추가 설정은
spring.datasource.hikari.*
로 할 수 있습니다.spring.datasource.hikari.maximum-pool-size=10 spring.datasource.hikari.connection-timeout=30000
2. routingDataSource
와 같은 복잡한 설정
- ✅ 사실 확인:
여러 데이터소스를 사용하거나 동적 라우팅이 필요한 경우 (예: Read/Write 분리, 멀티 테넌시), 명시적인 설정이 필요합니다.- 자동 구성의 한계: Spring Boot의 자동 구성은 단일
DataSource
만을 지원합니다. - 해결 방법:
AbstractRoutingDataSource
를 상속한 커스텀 데이터소스를 정의합니다.@Primary
를 사용해 기본 데이터소스를 명시합니다.- 필요 시 자동 구성을 비활성화합니다 (
@EnableAutoConfiguration(exclude = DataSourceAutoConfiguration.class)
).
- 자동 구성의 한계: Spring Boot의 자동 구성은 단일
3. 예시: routingDataSource
설정
@Configuration
public class DataSourceConfig {
// Writer DataSource (Primary)
@Bean
@ConfigurationProperties("spring.datasource.writer")
@Primary
public DataSource writerDataSource() {
return DataSourceBuilder.create().build();
}
// Reader DataSource
@Bean
@ConfigurationProperties("spring.datasource.reader")
public DataSource readerDataSource() {
return DataSourceBuilder.create().build();
}
// Routing DataSource
@Bean
public DataSource routingDataSource(
@Qualifier("writerDataSource") DataSource writer,
@Qualifier("readerDataSource") DataSource reader
) {
ReplicationRoutingDataSource routingDataSource = new ReplicationRoutingDataSource();
Map<Object, Object> dataSourceMap = new HashMap<>();
dataSourceMap.put("writer", writer);
dataSourceMap.put("reader", reader);
routingDataSource.setTargetDataSources(dataSourceMap);
routingDataSource.setDefaultTargetDataSource(writer);
return routingDataSource;
}
}
4. 주의사항
- 자동 구성 비활성화:
커스텀DataSource
빈을 정의하면 Spring Boot의 자동 구성이 비활성화됩니다.- 트랜잭션 관리자(
PlatformTransactionManager
), 엔티티 매니저 팩토리(EntityManagerFactory
)도 직접 설정해야 합니다.
- 트랜잭션 관리자(
- HikariCP 우선순위:
다른 커넥션 풀 (예: Tomcat JDBC)이 클래스패스에 있으면 HikariCP 대신 사용될 수 있습니다.- 명시적으로 HikariCP를 지정하려면
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
를 설정합니다.
- 명시적으로 HikariCP를 지정하려면
✅ 정리
- 기본 구성:
spring.datasource.url
,username
,password
만으로 HikariCP 기반DataSource
가 자동 구성됩니다. - 복잡한 구성: Read/Write 분리와 같은 고급 시나리오에서는 명시적인 설정이 필수입니다.