Вопросы по управлению транзакциями - PullRequest
3 голосов
/ 03 марта 2011

Я пытаюсь реализовать бизнес-потребности в Spring и у меня возникают проблемы с управлением транзакциями.

Бизнес нужен просто,
1) Запрос к базе данных (# 1) с некоторыми критериями.
2) Запишите результаты запроса в плоский файл.
3) Обновите эти записи в базе данных (# 1) как «обработанные».
4) Вставьте записи в другую базу данных (# 2) в результате первых 3 шагов.

Мне нужно, чтобы эти 4 шага были свободными. Например, если 4-й шаг не удался, последний элемент, записанный в плоский файл на 2-м шаге, должен быть откатан. Я нашел "Диспетчер файловых ресурсов Apache Commons" для реализации механизма отката с файлами.

Мой наставник порекомендовал мне использовать Spring Batch для подобных проектов. Однако, учитывая тот факт, что Spring Batch использует стиль «чан-ориентированной обработки», реализовать его в Spring Batch довольно сложно. Потому что, насколько мне известно, стиль, ориентированный на чанк, требует выполнения 2-го шага для всего чанка, а затем позволяет перейти к 3-му и 4-му шагу в моей реализации.

Думаю, мне нужен общий совет по поводу этого проекта и по поводу того, стоит ли использовать Spring Batch для этой цели. Кроме того, стоит ли пытаться реализовать эти потребности в параллельной среде, поскольку механизм отката будет довольно сложным для этого стиля.

Ответы [ 2 ]

3 голосов
/ 03 марта 2011

Целью пакетной обработки является разбиение того, что вы пытаетесь сделать, на небольшие единицы работы, которые можно обрабатывать по отдельности (последовательно или параллельно). Spring batch - это фреймворк, который предоставляет вам гибкий механизм, построенный поверх Spring, который позволяет вам выполнять пакетную обработку стилей. В зависимости от ваших требований вы можете настроить выполнение Spring Spring различными способами. Упомянутая вами обработка, ориентированная на чанки, - это всего лишь один из способов использования пакета Spring.

Если я посмотрю на предоставленную вами информацию, то вот элементы вашей заявки, которые я вижу:

  • чтение записей из базы данных, которые нужны обрабатываться
  • обрабатывает записи, что приводит к БД № 2 обновляется
  • пометить записи как обработанные
  • запись записи в обработанный файл

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

  1. Извлечение записей из базы данных для обработки. Поиск будет осуществляться с помощью специального средства извлечения базы данных. Эти записи будут использоваться Spring Batch в качестве селектора записей. Затем вы настроите пакет Spring для итерации по этому списку.
  2. Вы должны сконфигурировать следующий шаг пакета Spring для обработки каждой из записей, полученных на шаге 1. Эта обработка будет состоять из обработки отдельной записи и записи результатов во вторую базу данных.
  3. Ваш последний шаг - завершить обработку отдельной записи. Как и в большинстве сред Spring, существует множество различных способов настройки, когда это происходит. Этот последний шаг будет выполнять две функции: обновлять запись в db # 1 после обработки и записывать обработанную запись в выходной файл. Запись выходного файла может быть выполнена в качестве шага 4 после завершения всего пакетного процесса, где вы будете просматривать записи, помеченные как обработанные во время текущего прогона, и записывать данные по мере необходимости.

Spring batch позволяет вам настраивать управление транзакциями на протяжении всей обработки, поэтому вы можете настроить транзакцию, выполняющую все действия, и, если запись в файл не удалась, ее можно настроить для отката остальных операций базы данных.

При таком подходе вы можете обрабатывать записи последовательно, параллельно и т. Д. Однако все это предполагает, что вы можете разбить данные на более мелкие единицы работы. Если это не так, то пакетная обработка на самом деле не может быть выполнена, поскольку у вас есть только один процесс.

Я хотел бы сказать, что есть простой ответ, чтобы решить, использовать ли пакет Spring или нет. Это платформа, которая позволяет вам делать много вещей. Наряду с такой гибкостью у него относительно высокая кривая обучения.

Надеюсь, это поможет.

0 голосов
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...