작성
·
20
1
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)을 활용하는 방법이 있습니다.
지금 설정하신 것처럼 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
와 같은 방법으로 프로파일을 활성화하면 해당 설정이 적용됩니다.
또한, 명시적으로 각 모듈에서 사용할 DataSource
를 설정할 수 있으며, 이는 @Bean을 통해 빈으로 등록해서 사용할 수 있습니다. 위 코드는 이미 별도의 DataSource
빈을 생성하여 JobRepository
에 설정하고, 배치 모듈에서 빈으로 등록된 데이터 소스를 사용하는 사례입니다.
@Configuration
public class ApiConfig {
@Bean
@ConfigurationProperties("api.datasource")
public DataSource apiDataSource() {
return new HikariDataSource();
}
}
설정에서 DataSource
가 여러 개로 설정되어 있고, 필요한 모듈에서 각기 다른 DataSource
빈을 참조하게 되는 경우, 설정에 따라 데이터 소스의 커넥션 풀이 분리되므로 별도의 Config
설정 없이도 이 두 데이터 소스는 독립적으로 관리됩니다.
이와 관련된 유사한 질문에 대한 답변 링크:
- Spring Boot 멀티모듈에서 데이터베이스 분리 적용하기
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.