Spring: JdbcTemplate.query () с RowCallbackHandler выполняет параллельные вызовы processRow ()? - PullRequest
0 голосов
/ 22 июня 2011

Spring Docs указывает аргумент RowCallbackHandler как "объект, который будет извлекать результаты, по одной строке за раз". Я вижу, что processRow() вызывается один раз в строке, но могут ли эти вызовы быть параллельными?

У меня есть RowCallbackHandler поддерживающее состояние, включая создание Collection обработанных объектов и время от времени отправка этой Коллекции для дальнейшей обработки. Мне нужно знать, может ли это Collection быть изменено одновременно, или я могу верить, что одновременно происходит только один processRow().

Ответы [ 2 ]

3 голосов
/ 22 июня 2011

Это действительно зависит от вас.Если вы видели исходный код, RowCallbackHandler, который вы предоставляете, обернут в RowCallbackHandlerResultSetExtractor класс адаптера, а затем снова обернут в QueryStatementCallback (sic!).

Неважно, дело в том: если выПередав один и тот же экземпляр RowCallbackHandler двум одновременным выполнениям query(), Spring будет использовать один и тот же объект через все эти слои.Но если вы создаете новый экземпляр RowCallbackHandler для каждого query() выполнения, вы в безопасности.

0 голосов
/ 22 июня 2011

Если я понимаю ваш вопрос, это по 1 строке за раз. Пример кода взят из их экстрактора набора результатов, который вызывает этот интерфейс.

while (rs.next()) {
   this.rch.processRow(rs);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...