2012-01-21 3 views
2

다양한 은행 명세서를 내 응용 프로그램으로 변환하는 스프링 배치 작업이 있습니다. 각 은행 명세서 유형에는 독자가 있고 모든 은행 명세서 유형에는 하나의 작성자 만 있습니다. 작업은 매우 간단합니다 - 읽기 과정 및 쓰기 : 이제런타임에 스프링 배치 판독기를 동적으로 선택하십시오.

<batch:job id="importer" restartable="true"> 
    <batch:step id="import"> 
     <batch:tasklet> 
      <batch:chunk reader="reader" writer="writer" processor="processor" commit-interval="10" /> 
     </batch:tasklet> 
    </batch:step> 
</batch:job> 

, 나는 진술 파일을 제공하기 위해 최종 사용자뿐만 아니라 은행 정보를 좋아하고이에 대한 런타임에 해당 스프링 배치 리더를 선택할 것 실행할 직업. 처음 단계에서 미리 읽을 수 있고 은행 양식 명세서 형식을 먼저 추측하려고한다면 이상적입니다. 그러나 나는 빗 나간다.

실행하기 전에 작업에 판독기를 삽입 할 수 있습니까? 아니면 내 목표를 달성하기위한 더 좋은 방법이 있습니까? 단계가


당신이 독자 변환 및 매핑 로직을 이동하려고 않았다 너무 시작하기 전에 문제가

답변

2

각 리더 유형

  • 각 리더 :

    또한
    <batch:chunk reader="#{jobParameters['reader.beanId']}" writer="writer" processor="processor" commit-interval="10" /> 
    

    당신은 작업의 런타임에 바인딩을 고려할 수 단계는 여기에, 속성 step-scope

  • +0

    우리는 이것을 구현하려고 시도했지만 작동하지 않는 것입니다 (스프링 배치 3.0.4를 사용하면이 시점에서 jobParameters에 액세스하지 못합니다). 2 종류 단계와 결정자. – Dayde

    1

    , 그 (파일) Itemreaders 파일을 의미하는 단계가 시작되기 전에 구성되어이 열립니다 프로세서?

    • 유형을 검사 한 단계를 만들 : 당신은 필요한 리더 유형을 찾기 위해 별도의 사전 단계로 작동 할 수이

      <bean id="dumbItemReader" class="org.springframework.batch.item.file.FlatFileItemReader" scope="step"> 
          <property name="resource" value="#{jobParameters['input.file']}" /> 
          <property name="lineMapper"> 
           <bean class="org.springframework.batch.item.file.mapping.PassThroughLineMapper" /> 
          </property> 
          <property name="strict" value="true" /><!-- optional --> 
      </bean> 
      

      또 다른 매우 깨끗 솔루션에 대한 PassThroughLineMapper을 사용할 수 있습니다 (어느 고전 공정 구성에서 첫번째 줄을 읽거나 사용 tasklet step)

    • 사용 programmatic flow decision
    • 스텝 구성 당신은 입력 매개 변수/또는 propeties 파일에서 독자를 설정할 수 있습니다 step scoped
    관련 문제