Из того, что я понимаю, оба DataSource
и JdbcTemplates
являются threadsafe
, поэтому вы можете настроить один экземпляр JdbcTemplate
, а затем безопасно ввести эту общую ссылку в несколько DAO (или хранилищ). Кроме того, DataSource
должен быть синглетом Spring, так как он управляет пулом соединений.
Официальная Spring Документация JdbcTemplate лучшие практики объясняет альтернативы (выдержки из руководства выделены курсивом, а мои заметки между квадратными скобками:
- сконфигурируйте DataSource в конфигурационном файле Spring, а затем иждитет-впрыскивайте совместно используемый DataSource bean в свои классы DAO; JdbcTemplate создается в установщике для DataSource. [с конфигурацией XML, и это приводит к нескольким экземплярам JdbcTemplate, поскольку в наборе источников данных есть
new JdbcTemplate(dataSource)
] - используйте компонентную проверку и поддержку аннотаций для инъекций зависимостей. В этом случае вы аннотируете класс с помощью @Repository (что делает его кандидатом на компонентное сканирование) и аннотирует метод setSource DataSource с помощью @Autowired. [также этот случай приводит к нескольким экземплярам JdbcTemplate]
- Если вы используете класс Spring JdbcDaoSupport, и ваши различные классы DAO, поддерживаемые JDBC, расширяются от него, то ваш подкласс наследует метод setDataSource (..) из класса JdbcDaoSupport. Вы можете выбрать, следует ли наследовать этот класс. Класс JdbcDaoSupport предоставляется только для удобства. [поскольку у вас есть экземпляр JdbcDaoSupport для каждого расширяемого класса, для каждого экземпляра производного класса есть экземпляр JdbcTemplate (см. исходный код для JdbcDaoSupport)]
Однако, более поздняя заметка, препятствует всем представленным параметрам:
После настройки экземпляр JdbcTemplate является потокобезопасным. Возможно, вам понадобится несколько экземпляров JdbcTemplate, если ваше приложение обращается к нескольким базам данных, для чего требуется несколько источников данных, а затем несколько разных настроенных JdbcTemplates.
Другими словами, все предоставленные параметры приведут к тому, что несколько экземпляров JdbcTemplate (по одному на DAO) и сразу после того, как документы скажут, что это не обязательно при работе с одной базой данных.
Что бы я делал, это прямое вложение JdbcTemplate
в различные DAO, которые нуждаются в этом, так что мой вопрос: нормально ли это делать? Кроме того, вы также считаете, что справочная документация Spring является противоречивой? Или мое недоразумение?