멀티모듈에서 DB 커넥션 풀 분리
87
작성한 질문수 14
DataSource에 대한 질문
배치를 적용중인데, 멀티모듈에서 배치용 Application을 따로두고, 배치용 yaml에서 datasource를 두었고, api쪽도 yaml에서 datasource를 보고 있다.
이때 , 아래와 같이 Config에서 Bean을 통해 Datasource을 생성, JobRepository에 전달해주지 "않아도" 커넥션이 분리가 되는가?
API 쪽 디비와, 배치 디비의 커넥션풀을 따로 쓰고싶은데 아래와 같이 별도 세팅 없이 yaml만으로 분리는 안되는지 궁금하다...
@Configuration
class JpaConfig {
@Bean
@ConfigurationProperties("spring.datasource")
fun batchDataSource(): DataSource {
return HikariDataSource()
}
@Bean
fun jobRepository(
batchDataSource: DataSource,
transactionManager: PlatformTransactionManager,
): JobRepository {
return JobRepositoryFactoryBean().apply {
setDataSource(batchDataSource)
setDatabaseType(DatabaseType.POSTGRES.name)
setTransactionManager(transactionManager)
afterPropertiesSet()
}object
}
}
답변 2
1
#!/bin/bash
# KILL-9 Response System v1.0
echo ">> 미안하다 늦잠 이슈로 답변을 이제한다. 열심히 달리는구나. 좋다."
echo ""
echo "[TARGET LOCKED] 네가 찾는 답 = 5장 작전2"
echo ""
echo "=== 질문 내용 분석 ==="
echo "API DB와 Batch DB의 커넥션 풀 분리?"
echo "YAML만으로 해결 가능한가?"
echo ""
echo ">>> 답: 불가능하다. 설정 코드가 필요하다."
echo ""
echo "=== 처형 매뉴얼 위치 ==="
echo "5장 작전2에서 완벽히 해부해놨다."
echo ""
echo "가급적 5장 작전1부터 차례로 살펴보길 권장하지만,"
echo "당장 알고 싶다면 얼른 달려가서"
echo ""
echo " [Command + F] → 'TransactionManager 분리하기'"
echo ""
echo "검색해라."
echo ""
echo ">>> 5장에서 만나자."
echo ""
kill -9 $$
0
안녕하세요, 인프런 AI 인턴입니다.
tjrwn0716님께서 배치와 API 모듈에서 서로 다른 데이터베이스 커넥션 풀을 사용하는 방법에 대해 궁금하신 것 같습니다.
문제 설명 및 해결 방법
멀티모듈 프로젝트에서 배치 모듈과 API 모듈이 각각 별도의 데이터 소스를 가지도록 설정할 수 있습니다. 데이터 소스를 분리하여 사용하려면 Spring Boot의 프로파일(profile)이나 별도의 환경 설정 파일(yaml)을 활용하는 방법이 있습니다.
1. Yaml 설정
지금 설정하신 것처럼 application.yml 파일에 각 모듈의 데이터 소스를 별도로 설정할 수 있습니다. 예를 들어, 아래처럼 별도의 프로파일을 사용해 서로 다른 데이터 소스를 지정할 수 있습니다:
# 배치 모듈에서 사용할 데이터 소스
spring:
datasource:
url: jdbc:postgresql://localhost:5432/batchDb
username: batch_user
password: batch_password
hikari:
maximum-pool-size: 10
# API 모듈에서 사용할 데이터 소스
spring:
profiles: api
datasource:
url: jdbc:postgresql://localhost:5432/apiDb
username: api_user
password: api_password
hikari:
maximum-pool-size: 10
--spring.profiles.active=batch와 같은 방법으로 프로파일을 활성화하면 해당 설정이 적용됩니다.
2. 데이터 소스 빈을 통한 명시적 설정
또한, 명시적으로 각 모듈에서 사용할 DataSource를 설정할 수 있으며, 이는 @Bean을 통해 빈으로 등록해서 사용할 수 있습니다. 위 코드는 이미 별도의 DataSource 빈을 생성하여 JobRepository에 설정하고, 배치 모듈에서 빈으로 등록된 데이터 소스를 사용하는 사례입니다.
@Configuration
public class ApiConfig {
@Bean
@ConfigurationProperties("api.datasource")
public DataSource apiDataSource() {
return new HikariDataSource();
}
}
3. 커넥션 분리 확인
설정에서 DataSource가 여러 개로 설정되어 있고, 필요한 모듈에서 각기 다른 DataSource 빈을 참조하게 되는 경우, 설정에 따라 데이터 소스의 커넥션 풀이 분리되므로 별도의 Config 설정 없이도 이 두 데이터 소스는 독립적으로 관리됩니다.
이와 관련된 유사한 질문에 대한 답변 링크:
- Spring Boot 멀티모듈에서 데이터베이스 분리 적용하기
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
형 책 어떻게 받아?
1
59
1
JpaCursorItemReader의 정렬 조건 부재의 영향
1
46
2
"컴파일 시점에 없는 값을 어떻게 참조할 것인가?" 섹션
1
53
2
형 이번에 낸 책이랑 강의 내용에 차이가 있어?
1
90
1
형 나 몰래 책내면 모를 줄 알고?
2
79
2
강의 중복 확인 요청
1
43
1
중복내용 제보?!
1
73
2
Json 요청 처리
1
69
2
[건의][6장][작전1] deprecated 메소드
1
78
2
[예제][3장][작전2] windows 에서 마지막 예제
1
71
2
[오타][3장][작전1] 형 이건 빨리 해줘
2
128
2
[오타] "리스너 활용: 시스템 완전 장악 매뉴얼" 부분
1
78
1
[오타] "JobScope와 StepScope 사용 시 주의사항" 부분
1
76
2
spring boot 4 + spring batch 6 설정 변경?
1
147
2
Batch 패키지 설계 — 실무에서 Job 단위 구조
1
128
2
Spring batch를 실행해줄 스케줄러와 batch 실행 환경
1
103
1
메타테이블에 데이터가 생기지 않는 이유
1
134
2
Spring Batch 4.3.10 ExecutionContext 한글 인코딩 이슈 관련 문의
1
125
2
@StepScope 또는 @JobScope와 JobOperator
1
165
5
Remote Partitioning
1
120
2
킬구형 실무에서는 JPA ItemReader / ItemWriter를 더 선호해? 아니면 JDBC itemReader/ItemWriter를 더 선호해?
1
154
2
병렬 중첩
1
111
3
형 코드에 public static class 이게 뭐야 ?
1
151
3
ExitStatus
1
73
2





