Несколько экземпляров JdbcTemplate или нет?

Насколько я понимаю, оба DataSource и JdbcTemplates являются потокобезопасными , поэтому вы можете настроить один экземпляр JdbcTemplate , а затем безопасно внедрить эту общую ссылку в несколько DAO (или репозиториев) . Также DataSource должен быть синглтоном Spring, поскольку он управляет пулом соединений.

Официальная Spring Documentation Рекомендации JdbcTemplate объясняют альтернативы (выдержки из руководства выделены курсивом, а мои примечания заключены в квадратные скобки:

  • настройте DataSource в вашем файле конфигурации Spring, а затем введите зависимость этого общего компонента DataSource в ваши классы DAO ; JdbcTemplate создается в установщике для DataSource. [с конфигурацией XML, и это приводит к множеству экземпляров JdbcTemplate, поскольку в установщике источников данных есть новый JdbcTemplate (dataSource) ]
  • использовать сканирование компонентов и поддержку аннотаций для внедрения зависимостей. В этом случае вы аннотируете класс с помощью @Repository (что делает его кандидатом для сканирования компонентов) и аннотируете метод установки DataSource с помощью @Autowired. [также этот случай приводит к нескольким экземплярам JdbcTemplate]
  • Если вы используете класс Spring JdbcDaoSupport, и ваши различные классы DAO, поддерживаемые JDBC, расширяются от него, то ваш подкласс наследует метод setDataSource (..) от класс JdbcDaoSupport. Вы можете выбрать, следует ли наследовать от этого класса. Класс JdbcDaoSupport предоставляется только для удобства. [поскольку у вас есть экземпляр JdbcDaoSupport для каждого класса, расширяющего его, существует также экземпляр JdbcTemplate для каждого экземпляра производного класса (см. исходный код JdbcDaoSupport )]

Однако в более позднем примечании не приветствуются все только что представленные варианты:

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

Другими словами, все только что представленные параметры приведут к появлению нескольких экземпляров JdbcTemplate (по одному для каждого DAO), и сразу после того, как в документации говорится, что это не обязательно при работе с одной базой данных.

Что бы я сделал, так это внедрил напрямую JdbcTemplate в различные DAO, которые в этом нуждаются, поэтому мой вопрос: можно ли это сделать? А также считаете ли вы, что справочная документация Spring противоречива сама себе? Или это мое недоразумение?

20
задан Jonathan 13 January 2014 в 10:38
поделиться