복붙노트

[SPRING] Spring 배치 - 처리 후 디렉토리에서 플랫 파일 삭제

SPRING

Spring 배치 - 처리 후 디렉토리에서 플랫 파일 삭제

스프링 배치에서 MultiResourceItemReader를 사용하여 디렉토리에서 여러 파일을 읽습니다. 그런 다음 개별 파일을 처리하기 위해 대리인으로 FlatFileItemReader를 사용하고 있습니다. 내 용도는 파일이 완전히 처리되면 (READ-WRITE가 완료된 후) 파일을 삭제 한 다음 multiResourceitemReader가 다른 파일을 선택해야하고 계속해야하는 경우입니다.

나는 FileDeletingTasklet을 사용하여 디렉토리에서 파일을 삭제하려고 시도했지만 Spring docs에 따라 execute 메소드는 한 번만 호출됩니다. 처리 (READ-WRITE)되는 파일에서 어떻게 삭제할 수 있습니까? 그러나 모든 파일이 디렉토리에서 완전히 처리되면 전체 디렉토리 삭제와 함께 가고 싶지 않습니다.

아래는 내가 사용하고있는 직업이다.

<batch:job id="getEmpDetails">
    <batch:step id="readAndProcess" next="deleteProcessedFile">
        <batch:tasklet>
            <batch:chunk reader="readEmpDetails" writer="writeEmpDetails" commit-interval="100">
            </batch:chunk>
        </batch:tasklet>
    </batch:step>
    <batch:step id="deleteProcessedFile">
            <batch:tasklet ref="fileDeletingTasklet" />
    </batch:step>
</batch:job>
<bean id="fileDeletingTasklet" class="com.test.FileDeletingTasklet">
      <property name="directoryResource">
          <bean id="directory" class="org.springframework.core.io.FileSystemResource">
             <constructor-arg value="E:/testDir/file1.txt" />
        </bean>
      </property>
</bean>

해결법

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

    1.FlatFileItemReader.setResource () 메서드를 다음과 같이 재정의하십시오.

    FlatFileItemReader.setResource () 메서드를 다음과 같이 재정의하십시오.

    public void setResource(Resource resource) {
      this.resource = resource;
      this.delegateReader.setResource(resource);
    }
    

    스트림이 완전히 소비 된 경우 FlatFileItemReader.read ()에서 파일 삭제 관리

    public T read() throws Exception {
      T o = this.delegateReader.read();
      if (o == null) {
        // Perform deletion here
        deleteFile(this.resource);
      }
      return o;
    }
    
  2. ==============================

    2.나는 jobcontext에 진행된 파일 이름을 list로 추가하고 다음 단계에서 사용자 정의 tasklet을 실행하여 파일을 삭제하거나 목록을 기반으로 파일을 이동합니다.

    나는 jobcontext에 진행된 파일 이름을 list로 추가하고 다음 단계에서 사용자 정의 tasklet을 실행하여 파일을 삭제하거나 목록을 기반으로 파일을 이동합니다.

  3. from https://stackoverflow.com/questions/23323535/spring-batch-delete-the-flatfile-from-directory-after-processed by cc-by-sa and MIT license