Spring Batch Параллельное чтение из БД - PullRequest
0 голосов
/ 01 мая 2020

Как я могу реализовать параллельное чтение из БД в Spring Batch?

Согласно https://docs.spring.io/spring-batch/docs/current/reference/html/scalability.html Я могу реализовать многопоточный шаг, однако мне нужно реализовать SynchronizedItemStreamReader для моего читателя. Поэтому все мои запросы к БД являются последовательными из-за этого.

1 Ответ

1 голос
/ 01 мая 2020

JdbcCursorItemReader не является потокобезопасным, потому что он может обернуть один не потокобезопасный ResulSet. Вот почему в многопоточной среде вам необходим synchronized доступ к нему.

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

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

...