─━ IT ━─

SpringBoot batch 어플리케이션에서 datasource를 다중으로 사용할 때, 특정 Job은 특정 datasource만 인식하게 하는 방법

DKel 2023. 6. 11. 19:00
반응형

Spring Boot 배치 어플리케이션에서 특정 Job이 특정 데이터소스만 인식하도록 하려면 다음과 같은 방법을 사용할 수 있습니다:

Job 설정 클래스에 DataSource를 주입하는 방식을 변경합니다.
기존에는 모든 Job에서 모든 데이터소스를 주입받았던 것을, 특정 Job에서 필요한 데이터소스만 주입받도록 변경합니다.
이를 위해 Job 설정 클래스에 @Qualifier 어노테이션을 사용하여 원하는 데이터소스를 지정합니다.

@Configuration
public class BatchJobConfig {

    @Autowired
    @Qualifier("firstDataSource")
    private DataSource firstDataSource;

    // 다른 데이터소스 주입은 제거합니다.
    // ...

    // 특정 Job에서만 사용할 데이터소스를 주입받습니다.
    @Autowired
    @Qualifier("secondDataSource")
    private DataSource secondDataSource;

    @Autowired
    private JobBuilderFactory jobBuilderFactory;

    // ...
}


특정 Job에서 주입받은 데이터소스를 사용하도록 설정합니다.
Job 설정 클래스에서 특정 Job에 대한 설정을 구성할 때 주입받은 데이터소스를 사용합니다.

@Configuration
public class BatchJobConfig {

    // ...

    @Bean
    public Job myJob() {
        return jobBuilderFactory.get("myJob")
                .start(myStep())
                .build();
    }

    @Bean
    public Step myStep() {
        return stepBuilderFactory.get("myStep")
                .<SomeData, SomeData>chunk(100)
                .reader(myReader())
                .writer(myWriter())
                .build();
    }

    @Bean
    public ItemReader<SomeData> myReader() {
        // Use firstDataSource for reading data
        // ...
    }

    @Bean
    public ItemWriter<SomeData> myWriter() {
        // Use secondDataSource for writing data
        // ...
    }
}


위의 예제에서는 myJob() 메서드에서 특정 Job에 대한 설정을 구성하고, myStep() 메서드에서 해당 Job에 사용될 ItemReader와 ItemWriter에서 주입받은 데이터소스를 사용하도록 설정합니다.

이렇게 설정하면 특정 Job에서는 해당 Job에 맞는 데이터소스를 인식하고 사용하게 됩니다. 다른 Job들은 전혀 관여하지 않으며, 다른 데이터소스도 주입받지 않습니다.

반응형