是否具有多个 JdbcTemplate 实例?
据我所知,和 都是 ,因此您可以配置 JdbcTemplate
的单个实例,然后安全地将此共享引用注入到多个 DAO(或存储库)中。也应该是一个 Spring 单例,因为它管理连接池。DataSource
JdbcTemplates
threadsafe
DataSource
官方的Spring文档JdbcTemplate最佳实践解释了替代方案(手册的摘录是斜体的,我的注释在方括号之间:
-
在Spring配置文件中配置一个数据源,然后将该共享的DataSource Bean注入DAO类中;JdbcTemplate在DataSource的设置器中创建。[使用XML配置,这会导致多个JdbcTemplate实例,因为在数据源设置器中有
new JdbcTemplate(dataSource)
] - 使用组件扫描和注释支持进行依赖关系注入。在这种情况下,您可以使用@Repository对类进行批注(这使其成为组件扫描的候选项),并使用@Autowired对 DataSource setter 方法进行批注。[这种情况也会导致多个 JdbcTemplate 实例]
- 如果您使用的是Spring的JdbcDaoSupport类,并且您的各种JDBC支持的DAO类从它扩展,那么您的子类将从JdbcDaoSupport类继承setDataSource(..)方法。您可以选择是否从此类继承。提供 JdbcDaoSupport 类只是为了方便起见。[由于每个扩展它的类都有一个 JdbcDaoSupport 实例,因此派生类的每个实例也有一个 JdbcTemplate 实例(请参阅 JdbcDaoSupport 的源代码)]
但是,稍后的说明不鼓励刚才提供的所有选项:
配置完成后,JdbcTemplate 实例是线程安全的。如果您的应用程序访问多个数据库,则可能需要多个 JdbcTemplate 实例,这需要多个数据源,随后需要多个不同配置的 JdbcTemplate。
换句话说,刚刚提供的所有选项都将导致具有多个JdbcTemplate实例(每个DAO一个),并且在文档说在使用单个数据库时不需要这样做之后。
我要做的是直接注入需要它的各种DAO,所以我的问题是,这样做可以吗?而且,您是否也认为Spring参考文档是自相矛盾的?还是我的误解?JdbcTemplate