2014-11-17 3 views
2

스프링 배치가 처음입니다. 다음을 달성해야합니다. 1 단계 : 원격 위치에서 로컬 디렉토리로 파일 복사. 2 단계 : 파일의 각 줄을 처리하십시오. 3 단계 : 처리 된 라인을 데이터베이스에 저장하십시오.스프링 배치 - 원격 위치에서 파일 복사

마지막 두 단계는 확실하지만 첫 번째 단계는 어떻게 수행 할 수 있습니까?

도움 주셔서 감사합니다.

+0

될 것입니다 달성하기 위해 태스크 릿을 작성할 수 있습니다. 주변 검색 –

답변

0

이 태스크 릿은 별도의 단계에있을 것입니다이

<step id="movingFile" next="step2"> 
     <tasklet ref="voterImportFileMovingTasklet" /> 
     <listeners> 
      <listener ref="stepLevelListener" /> 
     </listeners> 
    </step> 
<step id="step2" > 
      <chunk reader="FileReader" processor="ItemProcessor" writer="ItemWriter" commit-interval="300" 
       skip-limit="1000"> 
       <skippable-exception-classes> 
        <include class="java.lang.Exception" /> 
        </skippable-exception-classes> 
       <listeners> 
        <listener ref="voterImportListener" /> 
       </listeners> 
      </chunk> 
    </step> 

태스크 릿 내가 그런 질문은 이미 SO에 게시 확신

public class FileMovingTasklet implements Tasklet, InitializingBean { 
private Resource sourceDirectory; 
private Resource targetDirectory; 



private static final Log LOG = LogFactory.getLog(FileMovingTasklet.class); 

public Resource getSourceDirectory() { 
    return sourceDirectory; 
} 

public void setSourceDirectory(Resource sourceDirectory) { 
    this.sourceDirectory = sourceDirectory; 
} 

public Resource getTargetDirectory() { 
    return targetDirectory; 
} 

public void setTargetDirectory(Resource targetDirectory) { 
    this.targetDirectory = targetDirectory; 
} 


@Override 
public void afterPropertiesSet() throws Exception { 
    Assert.notNull(sourceDirectory, "Source directory must be set"); 
    Assert.notNull(targetDirectory, "Target directory must be set"); 
} 

@Override 
public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception { 

    InputStream inStream = null; 
    OutputStream outStream = null; 
    File[] files; 
    File dir = sourceDirectory.getFile(); 
    Assert.state(dir.isDirectory()); 
     files = dir.listFiles(); 
    File bfile = null; 
    for (int i = 0; i < files.length; i++) { 


      bfile = new File(targetDirectory.getURL().getPath() + File.separator + files[i].getName()); 

     inStream = new FileInputStream(files[i]); 
     outStream = new FileOutputStream(bfile); 

     byte[] buffer = new byte[1024]; 

     int length; 
     // copy the file content in bytes 
     while ((length = inStream.read(buffer)) > 0) { 

      outStream.write(buffer, 0, length); 

     } 

     inStream.close(); 
     outStream.close(); 
    } 
    return RepeatStatus.FINISHED; 
} 
관련 문제