Эксклюзивные пакетные задания с javax.batch/jsr352

У нас есть приложение, которое выполняет много операций импорта и экспорта — в основном между файлами CSV и таблицами базы данных.

Некоторые импорты и экспорты конфликтуют (вы не можете выполнять их одновременно) по разным причинам (например, «устаревший код»).

Мы искали javax.batch. Концептуально очень подходит. Но чего нам действительно не удалось найти, так это возможности как-то управлять «исключительностью» определенных заданий, которые мы хотим запустить.

Может ли кто-нибудь указать на это? Как бы мы реализовали эксклюзивные пакетные задания с помощью javax.batch? Или мы должны реализовать свой собственный JobOperator для этого?

Обновить

Под «исключительностью» я подразумеваю способность определять, что определенные задания не могут выполняться параллельно. В самом тривиальном случае это будет означать «выполнять только одно задание за раз». В более сложных случаях более сложная логика, такая как «задание типа A не может выполняться с другими заданиями типа A или B, но с C все в порядке». "Тип задания", например, jobXmlName здесь (независимо от параметров задания).


person lexicore    schedule 27.04.2015    source источник
comment
Не могли бы вы немного подробнее описать, что вы подразумеваете под эксклюзивностью?   -  person Michael Minella    schedule 27.04.2015
comment
@MichaelMinella Привет, Майкл, пожалуйста, ознакомьтесь с обновлением. Я был бы признателен за ваше понимание.   -  person lexicore    schedule 28.04.2015


Ответы (1)


JSR-352 (и Spring Batch) намеренно избегают темы оркестровки. Для этого потребуется особый подход, препятствующий присущей этим пакетным платформам гибкости. Из-за этого JobOperator в JSR-352 не имеет понятия о предотвращении запуска одного задания во время выполнения другого.

Хотя вы можете выполнить это с помощью собственного пользовательского JobOperator, я бы не рекомендовал такой подход. Вместо этого вам лучше переместить этот уровень на один уровень выше, к тому, кто вызывает JobOperator, чтобы логика для этого типа оркестровки была отделена от деталей реализации запуска задания. Например, если вы используете планировщик для запуска заданий, я бы поместил туда логику относительно того, какие задания могут выполняться параллельно, а какие нет... не в пользовательском JobOperator.

person Michael Minella    schedule 27.04.2015