2013-06-13 2 views
2

JavaConfig에서 작동하는 Spring Batch 2.2를 얻으려고합니다.스프링 배치 2.2 JavaConfig

요즘에는 많은 것들을 설정하는 @EnableBatchProcessing 주석이 있습니다. 주석은 작업 데이터를 위해 데이터 소스를 사용하지만,이 데이터를 저장하지 않으려 고하고 테이블을 만들고 싶지 않습니다. 문서는 사용자 정의에 대해 뭔가를 말합니다 그러나 나는 작업을 얻을 수 없었다 :

  • 사용자가 구성 클래스 자체, 예에 BatchConfigurer을 컨텍스트에서 빈으로 DataSource를 제공하거나, 다른 구현해야 :
  • 이 메모리에 모든 데이터를 유지, 그래서 우리의 이전 버전에서 public class AppConfig extends DefaultBatchConfigurer {

우리는 MapJobRepositoryFactoryBean 클래스를 사용 할 수있었습니다. 어쨌든 완전한 JavaConfig 방식을 사용하고 DataSource을 정의하지 않습니까? 나는 그것을 작동시킬 수 없었다.

두 개의 데이터 소스 (사용하지 않는 HSQL 메모리 중 하나)와 실제 오라클 데이터 소스를 정의하더라도 2 개의 데이터 소스를 찾지 않아 작동하지 않습니다.

누구나 어떻게 작동하는지 알 수 있습니까? 아니면 XML 방식으로 구성하는 유일한 해결책입니까?

답변

6

DataSource가 필요한 다른 아티팩트가 없다고 가정하면 java config를 사용하여 DataSource없이 컨텍스트를 만들 수 있습니다. 그렇게하기 위해서는 DefaultBatchConfigurer를 확장해야합니다. 여기에서는 createJobRepository() 및 setDataSource()의 두 가지 메서드를 재정의합니다. 아래는 예제 컨텍스트입니다 (작업 또는 단계는 정의하지 않지만 모든 관련 bean을 올바르게 부트 스트랩합니다).

@Configuration 
@EnableBatchProcessing 
public static class BatchConfiguration extends DefaultBatchConfigurer { 

    @Override 
    protected JobRepository createJobRepository() throws Exception { 
     MapJobRepositoryFactoryBean factory = 
      new MapJobRepositoryFactoryBean(); 
     factory.afterPropertiesSet(); 
     return (JobRepository) factory.getObject(); 
    } 

    @Override 
    @Autowired 
    public void setDataSource(DataSource dataSource) { 
     if(dataSource != null) { 
      super.setDataSource(dataSource); 
     } 
    } 

    @Bean 
    public DataSource dataSource() { 
     return null; 
    } 
} 

나는 이것을 단순화하는 것이 유용한 기능이 될 것이라고 생각하며이를 Jira에 추가했습니다. 당신은 추적 할 수 있습니다 그것은 진보는 여기에 : 여기 https://jira.springsource.org/browse/BATCH-2048

+0

을 설정하는 동안 문제는 비즈니스 로직을위한 또 다른 데이터 소스가 필요하다는 것입니다. 질문에서 언급했듯이 두 데이터 소스가 발견 되었기 때문에 예외가 발생합니다. –

+0

그냥 확인하십시오 ... 두 데이터 소스와 javaconfig를 찾고지도 작업 저장소를 사용하고 있습니까? –

+0

우리가하려는 일은 비즈니스 로직을 위해 우리의 데이터 소스를 사용하고 스프링 배치 자체를 위해 임베디드 저장소를 사용하는 것입니다. 너무 번거롭기 때문에 우리는 작업 설정 자체에 XML 방식을 사용했습니다. 귀하의 답변을 주셔서 감사합니다! –

-1

은 그냥 BatchConfig 클래스 에서 데이터 소스() 메소드를 정의이 자동으로 호출되는 방법을

@Bean 
public DataSource dataSource() { 
    BasicDataSource dataSource = new BasicDataSource(); 
    dataSource.setDriverClassName(driverClassName); 
    dataSource.setUrl(driverUrl); 
    dataSource.setUsername(driverUsername); 
    dataSource.setPassword(driverPassword); 
    return dataSource; 
} 

우리의 경우에는 TransactionManager에

관련 문제