2014-12-31 2 views
5

Я пытаюсь настроить поток в весеннем пакете с использованием Java-конфигурации, этот поток в основном должен сделать это:Spring Batch (Java-конфигурации) шаг выполнения после jobExeuctionDecider

  1. Выполнение инициализации шаг (который добавляет запись в базу данных),

  2. затем выполнить решающий проверить существование файла,

2.1. Если файлы существуют, он выполнит задание на загрузку (это другой поток с параллельной связкой шагов)

  1. Выполнение этапа завершения (который добавляет запись в базу данных), это должно всегда выполняться, даже если 2.1 не был выполнен.

Я попытался сделать эту конфигурацию, но шаг отделки никогда не работает:

 Flow flow = new FlowBuilder<SimpleFlow>("commonFlow") 
      .start(stepBuilderFactory.get("initStep").tasklet(initTasklet).build()) 
      .next(decider) 
       .on(FlowExecutionStatus.COMPLETED.getName()) 
        .to(splitFlow) 
       .from(decider).on("*") 
        .end() 
    .next(stepBuilderFactory.get("finishStep").tasklet(finishTasklet).build()) 
      .end(); 

Я могу заставить его работать делать, как показано ниже, но это не так элегантно всего:

Step finishStep = stepBuilderFactory.get("finishStep").tasklet(finishTasklet).build(); 

    Flow flow = new FlowBuilder<SimpleFlow>("commonFlow") 
      .start(stepBuilderFactory.get("initStep").tasklet(initTasklet).build()) 
      .next(decider) 
       .on(FlowExecutionStatus.COMPLETED.getName()) 
        .to(splitFlow) 
        .next(finishStep) 
       .from(decider).on("*") 
        .to(finishStep) 
      .end(); 

Кто-нибудь знает, как правильно выполнить шаг после принятия решения с помощью java-config?

+0

В вашем первом примере кода вы включили два «конца()». Попробуйте удалить первый «конец()». –

+0

Возвращение .on - TransitionBuilder, у меня должно быть что-то после включения. Я также попытался сделать глупый шаг после, но не работал. –

ответ

1

Похоже, что это делается намного сложнее, чем должно быть. Вам не нужно настраивать поток или принимать решения. Это ОЧЕНЬ простая работа и работа.

Простейший вариант - использовать Spring Integration для обнаружения подарков файла и запуска задания.

Следующим простейшим вариантом является только проверка работы кварца или CRON для файла и запуск пакетного задания.

И последнее, но не менее важное: вы можете запустить задание, и если ItemReader не сможет найти файл (ы), просто проглотите исключение. Или установите прослушиватель FileItemReader для проверки файлов на нем перед методом.

+0

Это всего лишь часть всего потока. Поскольку вы можете видеть, что finalFlow должен выполняться независимо от того, существует файл или нет. Представленные вами параметры будут запускаться только при создании файла. Вопрос о самой конфигурации. –

+0

Ну, если неважно, есть ли файл или нет, почему используется решающий элемент. Тогда просто запустите работу. Он проверяет, что файл выполняет шаги, включая последний. – BrianC

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