Spring Batch에서 동일한 파일을 두 번 처리하지 마십시오.

매튜 맥 피크

다음과 같이 Spring Batch 작업을 작성해야합니다.

  • 1 단계 : 파일 시스템에서 XML 파일을로드하고 해당 내용을 데이터베이스 준비 테이블에 씁니다.
  • 2 단계 : Oracle PL / SQL 프로 시저를 호출하여 스테이징 테이블을 처리합니다.

(그 직업 구조에 대한 의견은 환영하지만 질문은 아닙니다).

1 단계에서 XML 파일을로드 한 후 다른 디렉터리로 이동하려고합니다. 가능한 한 스테이징 테이블에 대한 쓰기와 함께 "트랜잭션"이되기를 바랍니다. 즉, 스테이징에 대한 쓰기와 파일 이동이 모두 성공하거나 성공하지 않습니다.

(A) 스테이징 쓰기가 발생했지만 파일이 이동하지 않으면 다음 실행에서 파일을 다시 선택하여 다시 처리하고 (B) 파일이 이동되었지만 스테이징 쓰기가 발생하지 않으면 이것이 필요하다고 생각합니다. 그러면 해당 파일의 처리를 놓쳤을 것입니다.

이 인터페이스의 요구 사항은 모두 견고성 에 관한 것 입니다. 마지막에 모든 파일을 이동하기 위해 단계 실행 리스너를 넣을 수 있다는 것을 알고 있지만 처리 데이터를 놓치지 않고 동일한 파일을 두 번 처리하지 않도록 보장하는 접근 방식을 원합니다.

어려움의 일부는 MultiResourceItemReader. ChunkListener.beforeChunk()청크 트랜잭션의 일부로 발생 하는 것을 읽었 으므로 CompletionPolicy리소스 (파일) 이름이 변경 될 때마다 청크를 완료하도록 사용자 지정 청크를 만들려고했지만 작동하지 못했습니다. afterChunk()어쨌든 트랜잭션의 일부가 아닌 리스너 가 필요했을 것 입니다.

특정 질문에 대한 지침을 받거나 Spring Batch에서 파일을 강력하게 처리하는 방법에 대한 전문가의 설명을 듣겠습니다. 감사!

이고르 코노 플리 안코

나는 지금 꽤 비슷한 봄 배치 프로세스를 가지고 있습니다.

스프링 배치는 귀하의 요구 사항에 적합합니다.

여기에서 봄 통합을 사용하는 것이 좋습니다. 스프링 통합에서는 폴더를 모니터링하도록 구성한 다음 배치 작업을 트리거하도록 구성 할 수 있습니다. 공식 문서 에는 좋은 예가 있습니다 .

그런 다음 강력한 스프링 배치 개념 (파라미터 식별)을 사용해야합니다. 스프링 배치 작업은 고유 한 매개 변수로 실행되며이 매개 변수를 식별로 지정하면 동일한 매개 변수로 다른 작업을 생성 할 수 없습니다 (원래 작업을 다시 시작할 수 있음).

/**
 * Add a new String parameter for the given key.
 *
 * @param key - parameter accessor.
 * @param parameter - runtime parameter
 * @param identifying - indicates if the parameter is used as part of identifying a job instance
 * @return a reference to this object.
 */
public JobParametersBuilder addString(String key, String parameter, boolean identifying) {
    parameterMap.put(key, new JobParameter(parameter, identifying));
    return this;
}

따라서 여기서 배치 작업에 대한 고유 식별 제약이 무엇인지 자문 해보아야합니다. 전체 파일 경로를 제안합니다. 하지만 그 누구도 동일한 파일 이름을 가진 다른 파일을 제공하지 않도록해야합니다. 또한 Spring 통합은 파일이 이미 응용 프로그램에 표시되었는지 확인하고 무시할 수 있습니다. AcceptOnceFileListFilter에 대한 설명서를 확인하십시오 .

'트랜잭션과 유사한'로직을 일괄 적으로 보장하려면 리스너에 넣지 말고 파일을 이동할 특정 단계를 만듭니다. 청취자는 보조 논리에 좋습니다. 이런 식으로 어떤 이유로이 단계가 실패하더라도 문제를 해결하고 작업을 다시 시도 할 수 있습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

동일한 입력을 두 번 입력하지 마십시오.

분류에서Dev

pandas에서 동일한 .loc을 여러 번 작성하지 마십시오.

분류에서Dev

Windows 10에서 .py 파일을 두 번 클릭하여 실행하십시오.

분류에서Dev

동일한 양식에서 동일한 지시문을 두 번 이상 사용

분류에서Dev

두 파일 사이에서 발견 된 경우 동일한 문자열을 다시 인쇄하지 마십시오.

분류에서Dev

Mysql에서 두 번째 마지막 행을 선택하십시오.

분류에서Dev

Spring Boot를 사용하여 Excel 파일을 읽는 동안 MySQL에 중복을 삽입하지 마십시오.

분류에서Dev

다른 드로어 블 폴더에서 동일한 드로어 블을 처리하지 마십시오.

분류에서Dev

pandas col에서 두 번째 행마다 -1을 곱하십시오.

분류에서Dev

foreach로 동일한 기능을 3 번 반복하지 마십시오.

분류에서Dev

==를 사용하여 두 객체가 파이썬에서 동일한 값을 갖는지 확인하십시오.

분류에서Dev

Concourse에서 첫 번째 작업이 실패하면 두 번째 작업을 실행하지 마십시오.

분류에서Dev

Java Stream API-평균을 계산하기 위해 동일한 술어를 두 번 사용하지 마십시오.

분류에서Dev

목록 파일을 사용하여 마스터 파일에서 두 번째 목록을 추출하고 일부 줄을 주석 처리합니다 ... 방법?

분류에서Dev

하스켈에서 아마도 및 두 기능을 일반화하십시오.

분류에서Dev

mysql 테이블의 두 열에서 동일한 값을 가진 중복 행을 병합하고 세 번째 열에 값을 추가하십시오.

분류에서Dev

두 명령에 인수와 동일한 파일 이름을 제공하십시오.

분류에서Dev

C 코드에서 동일한 파일을 두 번 읽기

분류에서Dev

큰 .csv 파일에서 처음 두 열을 인용하십시오.

분류에서Dev

CSV 파일의 두 번째 및 세 번째 행에서만 추가 쉼표를 제거하십시오.

분류에서Dev

.sh 파일을 실행하려면 두 번 클릭하십시오.

분류에서Dev

Excel에서 동일한 행의 두 값을 확인하십시오.

분류에서Dev

Notepad ++ : 새 파일을 열려면 탭 막대를 두 번 클릭하십시오.

분류에서Dev

동일한 파일을 열지 마십시오.

분류에서Dev

활동 인스턴스를 저장하고 두 번째로드에서 생성하지 마십시오.

분류에서Dev

여러 Okular 인스턴스에서 동일한 파일을 열지 마십시오.

분류에서Dev

파이썬을 사용하여 한 번에 여러 텍스트 파일의 마지막 줄을 목록으로 인쇄하십시오.

분류에서Dev

배열에서 동일한 항목을 출력하지 마십시오.

분류에서Dev

우분투. 동일한 디렉토리에 두 개의 파일을 만들고 두 번째 파일은 첫 번째 파일의 복사본입니다.

Related 관련 기사

  1. 1

    동일한 입력을 두 번 입력하지 마십시오.

  2. 2

    pandas에서 동일한 .loc을 여러 번 작성하지 마십시오.

  3. 3

    Windows 10에서 .py 파일을 두 번 클릭하여 실행하십시오.

  4. 4

    동일한 양식에서 동일한 지시문을 두 번 이상 사용

  5. 5

    두 파일 사이에서 발견 된 경우 동일한 문자열을 다시 인쇄하지 마십시오.

  6. 6

    Mysql에서 두 번째 마지막 행을 선택하십시오.

  7. 7

    Spring Boot를 사용하여 Excel 파일을 읽는 동안 MySQL에 중복을 삽입하지 마십시오.

  8. 8

    다른 드로어 블 폴더에서 동일한 드로어 블을 처리하지 마십시오.

  9. 9

    pandas col에서 두 번째 행마다 -1을 곱하십시오.

  10. 10

    foreach로 동일한 기능을 3 번 반복하지 마십시오.

  11. 11

    ==를 사용하여 두 객체가 파이썬에서 동일한 값을 갖는지 확인하십시오.

  12. 12

    Concourse에서 첫 번째 작업이 실패하면 두 번째 작업을 실행하지 마십시오.

  13. 13

    Java Stream API-평균을 계산하기 위해 동일한 술어를 두 번 사용하지 마십시오.

  14. 14

    목록 파일을 사용하여 마스터 파일에서 두 번째 목록을 추출하고 일부 줄을 주석 처리합니다 ... 방법?

  15. 15

    하스켈에서 아마도 및 두 기능을 일반화하십시오.

  16. 16

    mysql 테이블의 두 열에서 동일한 값을 가진 중복 행을 병합하고 세 번째 열에 값을 추가하십시오.

  17. 17

    두 명령에 인수와 동일한 파일 이름을 제공하십시오.

  18. 18

    C 코드에서 동일한 파일을 두 번 읽기

  19. 19

    큰 .csv 파일에서 처음 두 열을 인용하십시오.

  20. 20

    CSV 파일의 두 번째 및 세 번째 행에서만 추가 쉼표를 제거하십시오.

  21. 21

    .sh 파일을 실행하려면 두 번 클릭하십시오.

  22. 22

    Excel에서 동일한 행의 두 값을 확인하십시오.

  23. 23

    Notepad ++ : 새 파일을 열려면 탭 막대를 두 번 클릭하십시오.

  24. 24

    동일한 파일을 열지 마십시오.

  25. 25

    활동 인스턴스를 저장하고 두 번째로드에서 생성하지 마십시오.

  26. 26

    여러 Okular 인스턴스에서 동일한 파일을 열지 마십시오.

  27. 27

    파이썬을 사용하여 한 번에 여러 텍스트 파일의 마지막 줄을 목록으로 인쇄하십시오.

  28. 28

    배열에서 동일한 항목을 출력하지 마십시오.

  29. 29

    우분투. 동일한 디렉토리에 두 개의 파일을 만들고 두 번째 파일은 첫 번째 파일의 복사본입니다.

뜨겁다태그

보관