복붙노트

[SPRING] Java 구성 사용시 스프링 배치 테이블 접 두부

SPRING

Java 구성 사용시 스프링 배치 테이블 접 두부

내 스프링 배치 저장소 (Oracle 데이터베이스에 배포)는 스키마 이름을 앞에 추가 해야하는 다른 스키마에 있습니다.

XML 구성을 사용할 때는 다음과 같이 쉽습니다.

<job-repository id="jobRepository" table-prefix="GFA.BATCH_" />

그러나 Java Config를 사용하면 더 까다로워집니다. 내가 찾은 가장 좋은 해결책은 Java Config 클래스가 DefaultBatchConfigurer를 확장하고 createJobRepository () 메소드를 재정의하는 것입니다.

@Configuration
@EnableBatchProcessing
public class BatchConfiguration extends DefaultBatchConfigurer{
    @Autowired
    private DataSource dataSource;

    @Autowired
    private PlatformTransactionManager transactionManager;

    @Override
    protected JobRepository createJobRepository() throws Exception {
        JobRepositoryFactoryBean factory = new JobRepositoryFactoryBean();
        factory.setDataSource(dataSource);
        factory.setTransactionManager(transactionManager);
        factory.setTablePrefix("GFA.BATCH_");
        factory.afterPropertiesSet();
        return factory.getObject();
    }
...
}

XML 솔루션과 비교하면 거의 코드입니다! 그리고 그것은 너무 논리적이지 않습니다-첫 번째 추측은 다음과 같이 @Bean 메소드를 제공하는 것이 었습니다.

@Bean
public JobRepository jobRepository() throws Exception {
    JobRepositoryFactoryBean factory = new JobRepositoryFactoryBean();
    factory.setDataSource(dataSource);
    factory.setTransactionManager(transactionManager);
    factory.setTablePrefix("GFA.BATCH_");
    factory.afterPropertiesSet();
    return factory.getObject();
}

그러나 이것은 작동하지 않습니다.

내 질문은 : 내 솔루션이 최적입니까 아니면 더 나은 솔루션입니까? 매우 직관적이지 않은 클래스의 메소드를 재정의하는 대신 Bean을 정의하는 것을 선호합니다 ... 그리고 XML 구성에서 한 줄 코드에 다소 근접하도록 코드를 줄일 수 있다면 더 좋을 것입니다.

해결법

  1. ==============================

    1.배치 구성에 등록 된 모든 특성 파일에이 행을 추가하십시오.

    배치 구성에 등록 된 모든 특성 파일에이 행을 추가하십시오.

    spring.batch.table-prefix= GFA.BATCH_
    

    참고로 접두사 spring.batch는 Spring 부트와 함께 제공되는 org.springframework.boot.autoconfigure.batch.BatchProperties와 매핑됩니다. github의 소스 코드를 참조하십시오.

  2. from https://stackoverflow.com/questions/37436658/spring-batch-table-prefix-when-using-java-config by cc-by-sa and MIT license