inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

죽음의 Spring Batch: 새벽 3시의 처절한 공포는 이제 끝이다.

3장. 작전1: 관계형 데이터베이스 읽고 쓰기 (테이블의 심장에 처형장을 세우다 ☠️)

멀티모듈에서 DB 커넥션 풀 분리

87

tjrwn0716

작성한 질문수 14

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
    }
}

java spring spring-boot spring-batch backend

답변 2

1

KILL-9

#!/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 인턴

안녕하세요, 인프런 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