Изменить стратегию блокировки таблицы управления пакетной пружиной - PullRequest
0 голосов
/ 06 февраля 2020

У нас есть система, которая позволяет оператору останавливать длительное задание Spring Batch, используя JobExplorer для получения ссылки на JobExecution и вызывая stop(). Затем в наших заданиях есть код, который использует JobExplorer, чтобы получить актуальную копию JobExecution, чтобы проверить, не было ли оно помечено как STOPPING.

Наша проблема заключается в блокировке на таблицы метаданных в Microsoft SQL Server 2016. Каждый выбор выполняет общую блокировку страницы. Все, что я смог найти об изменении уровня блокировки, говорит об использовании подсказки в операторе SELECT. Но Spring Batch создает оператор, а не наш код.

Есть ли способ указать Spring Batch использовать параллельный доступ только для чтения при выполнении операторов SELECT? Если нет, то есть ли какой-то механизм, кроме написания нашего JobExplorer для выполнения sh этого?

1 Ответ

1 голос
/ 06 февраля 2020

остановка долго выполняющегося задания Spring Batch с помощью JobExplorer для получения ссылки на JobExecution и вызова на нем stop ().

JobExecution#stop будет устаревшим в следующем минорная версия 4.3 и удалена в следующей основной версии (см. https://github.com/spring-projects/spring-batch/issues/1605). Правильный способ остановить выполнение задания - использовать JobOperator#stop.

Есть ли способ указать Spring Batch использовать параллельный доступ только для чтения при выполнении операторов SELECT? Если нет, то есть ли какой-то механизм, кроме записи нашего собственного JobExplorer для выполнения sh this?

Существует открытая проблема, чтобы сделать проводник заданий транзакционным (только для чтения): https://github.com/spring-projects/spring-batch/issues/1307. В то же время вы можете сделать транзакцию SimpleJobExplorer (либо через AOP, либо расширив ее, добавив @Transactional(readOnly = true) в методы).

...