2012-10-04 8 views
1

우리는 대부분의 데이터를 DB에서 읽습니다. 때로는 결과 집합이 비어있는 경우도 있습니다.이 경우 작업을 즉시 중단하고 작성자에게 넘기지 않을 것입니다. 입력이 없으면 파일을 만들고 싶지 않습니다.입력이 없을 때 작업을 종료하는 방법

현재 우리는 다음 비즈니스 단계 또는 이전에 작성한 파일을 삭제하는 삭제 단계로의 전환을위한 입력 인 특정 문자열을 리턴하는 단계 수신기를 사용하여이 목표를 달성합니다 (파일 실제 데이터가 없음).

독자가 입력이 없다는 것을 알게 된 후에 작업을 끝내고 싶습니다.

+1

독자가 'null'을 반환하면 단계 실행이 종료되고 다음 단계로 진행하거나 일괄 처리 작업을 종료합니다. ItemReader의 사용자 정의 구현을 사용하는 경우 결과 세트가 비어있을 때 'null'을 리턴해야합니다. 이 작업을 종결 처리해야합니다. – firefox784

+0

@ firefox784이 작업은 한 단계에 해당하지만 전체 작업에는 해당되지 않습니다! 한 단계가 종료 될 때마다 (예를 들어, 판독기가 '널'을 반환 할 때), 얼마만큼의 데이터가 읽히더라도 다음 단계가 실행될 것이다. – Andy

답변

0

Joshua의 답변은 다음 업무 단계로 전환하는 대신 작업을 중단하는 문제를 해결합니다.

파일 작성자가 파일을 불필요하게 만들 수 있습니다. 델리게이트 (FlatFileItemWriter)를 사용하여 LazyItemWriter와 같은 것을 만들 수 있으며, write 메소드 호출이있을 경우에만 delegate.open (한 번)을 호출합니다. 물론 위임자가 이전에 열렸을 때만 delegate.close()를 호출해야하는지 확인해야합니다. 이렇게하면 빈 파일이 만들어지지 않으며 더 이상 파일을 삭제하지 않아도됩니다.

0

나는 OP와 같은 질문을 가지고 있습니다. 나는 모든 주석을 사용하고 있으며 판독기가 결과 (내 경우 File)가 없을 때 null로 리턴하면 Job Bean은 UnsatisfiedDependencyException으로 초기화되지 않고 stdout으로 예외가 발생합니다.

리더를 만든 다음 지정한 파일을 지정하지 않고 반환하면 작업이 만들어집니다. 그 후 ItemStreamException이 던져 지지만, Job이 autowiring을 지나쳐서 그 단계에서 Step 내부에 있기 때문에 내 로그에 던져진다. 적어도 내가하고있는 일에있어서 그것은 바람직한 것으로 보인다.

다른 해결책은 인정 될 것입니다.

관련 문제