【发布时间】:2017-12-06 19:17:07
【问题描述】:
我不确定下面是使用带有 DataSourceUtils.getConnection 的 Jdbc 模板在连接池环境中管理数据库连接的正确方法。
我做了什么:
-
我们正在使用 apache dbcp 进行连接池。在 Spring appconfig 中配置了连接池和 Jdbc 模板,如下所示
<!-- data source for xxxx--> <bean id="dbName" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="${oracle.driver}" /> <property name="url" value="${xxxx.oracle.url}" /> <property name="username" value="${xxxx.oracle.username}" /> <property name="password" value="${xxxx.oracle.password}" /> <property name="minIdle" value="1" /> </bean> <bean id="jdbcTemplateUib" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dbName" /> </bean> -
在 DAOImpl 中,我们必须在方法内部调用具有自定义 SQL 数据类型的存储过程。因此,我们需要获取相同的 connection 对象。我们得到的连接如下:
this.connection = DataSourceUtils.getConnection(jdbcTemplate.getDataSource());其中 DataSourceUtils 是 here 描述的 Spring 实现。
上述配置在本地运行良好,但我们有点担心这个程序的以下方面:
- 如果我们以这种方式访问连接,它会覆盖 appconfig 文件中的连接池机制吗?
- 根据文档here,DataSourceUtils.getConnection(DataSource dataSource) 将重用现有连接。所以我假设这不会破坏通过 JdbcTemplate 和 dbcp 对象创建的任何连接。
- 无需显式释放此连接,因为它由 jdbcTemplate 管理。
我不太确定上述项目。需要一些专家意见。
【问题讨论】:
标签: spring connection-pooling spring-jdbc jdbctemplate apache-commons-dbcp