Являются ли методы открытия и закрытия в itemreader и itemwriter подходящими местами для открытия и закрытия соединения с базой данных в пакетном задании java jsr-352? - PullRequest
0 голосов
/ 29 мая 2018

Являются ли методы открытия и закрытия в itemreader и itemwriter подходящими местами для открытия и закрытия соединения с базой данных в пакетном задании java jsr-352?Я не мог найти в спецификации, что, когда эти два метода будут вызваны, особенно в исключительном senario

1 Ответ

0 голосов
/ 29 мая 2018

База данных является одним из многих источников данных для пакетных заданий, поэтому в спецификации пакета не будут прописаны требования, специфичные для подключения к базе данных.Ответ на ваш вопрос во многом зависит от того, как вы реализуете свою программу чтения элементов jdbc и программу записи элементов jdbc.

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

Теперь рассмотрим жизненный цикл устройства чтения элементов jdbc и модуля записи элементов jdbc.Они относятся к выполнению шага, и поэтому их жизнь будет охватывать весь шаг выполнения.Не рекомендуется удерживать соединение в течение такого длительного периода времени, особенно для соединения, используемого в модуле записи элементов jdbc для обновления записей в базе данных.Например, при реализации JdbcItemWriter мы решили получать соединение по требованию, когда оно готово к записи фрагмента данных, и освобождать соединение сразу после использования (т. Е. Не в методах open или close).В этом случае нет необходимости держать соединение открытым между кусками.

Для JdbcItemReader мы решили открыть соединение в методе чтения элементов open и закрыть его в closeметод.Это потому, что наша реализация основана на действующем jdbc ResultSet, из которого можно непрерывно получать данные.Конечно, другие реализации могут выбрать кеширование или отключение данных и, таким образом, не полагаться на действующий ResultSet, а вместо этого использовать шаблон по требованию для лучшего использования ресурсов.

...