Являются ли методы open и close в itemreader и itemwriter нужными местами для открытия и закрытия соединения с базой данных в пакетном задании jsr-352 java?

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


person Ming    schedule 29.05.2018    source источник


Ответы (1)


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

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

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

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

person cheng    schedule 29.05.2018
comment
Гарантированно ли выполнение метода close для выполнения даже пакетного задания, прерванного из-за необработанного исключения? - person Ming; 29.05.2018