2017-01-18 3 views
0

Я новичок в весенней партии.Весенний пакетный файл после обработки

Мне нужно прочитать несколько файлов (разделитель) из папки и загрузить их в БД. Что я и сделал.

Но моя проблема после обработки каждого файла. Мне нужно переместить файл в папку processed или записи ошибок в папку Error.

Например, если я обработать файл ниже (abc.txt) из нескольких файлов:

D|hello1|123 
D|hello2|three - Error 
D|hello3|123 

Я знаю, что вторая запись об ошибке.

Теперь я должен записать запись об ошибке в файл ошибки (abc-error.txt) в папку ошибок и перейти к следующей записи. После успешной обработки файла, за исключением записей об ошибках, мне нужно переместить abc.txt в обработанную папку.

Как я могу достичь вышеуказанного требования?

Моя работа:

<batch:job id="file_to_db"> 
    <batch:step id="step1"> 
     <batch:tasklet ref="moveFiletoTmpFolder" /> 
     <batch:end on="FAILED"/> 
     <batch:next on="*" to="step2" /> 
    </batch:step> 
    <batch:step id="step2"> 
     <batch:tasklet transaction-manager="transactionManager" 
      start-limit="100"> 
      <batch:chunk reader="multiResourceReader" writer="databaseItemWriter" 
       commit-interval="100"> 
      </batch:chunk> 
     </batch:tasklet> 
    </batch:step> 
</batch:job> 
<bean id="multiResourceReader" 
     class=" org.springframework.batch.item.file.MultiResourceItemReader"> 
    <property name="resources" value="file:batch/csv/processing/*.csv" /> 
    <property name="delegate" ref="cvsFileItemReader" /> 
</bean> 

Работа не один шаг. Но каждый файл должен быть перемещен после его обработки. Записи ошибок должны быть записаны в отдельный файл с именем filename-error.txt для каждого файла.

+0

Это один шаг задания? Если возможно, покажите свою работу и настройку шага. –

+0

Teja, вы можете достичь, добавив еще один шаг с помощью таска, который делает движущуюся часть. Обратитесь к разделу «archiveFileTasklet» здесь: http://www.javaworld.com/article/2458888/spring-framework/open-source-java-projects-spring-batch.html?page=4 –

+0

@ Гость, Tasklet используется для выполнения операции один раз. Но для меня мне нужно переместить файл в разные папки после прочтения каждого файла из многих файлов. – Teja

ответ

0

Слушатели. Spring Batch имеет коллекцию слушателей для инъекции этого типа логики практически в любую точку шага или задания, которые могут вам понадобиться. В зависимости от того, где обнаружена ошибка, указывается, какой слушатель подходит. Например, если ошибка обнаружена во время чтения, внедрение метода ItemReadListener#onReadError имеет смысл. В общем, этот тип логики обычно обрабатывается путем внедрения правильных слушателей для выполнения требуемой логики в правильной точке процесса.

Вы можете прочитать больше о некоторых из слушателей, предоставляемых Spring Batch в справочной документации здесь: https://docs.spring.io/spring-batch/reference/html/configureStep.html#interceptingStepExecution

Смежные вопросы