使用 Jdbc 模板和 DataSourceUtils.getConnection 方法
Using Jdbc Template with DataSourceUtils.getConnection method
我不确定下面是使用 Jdbc 模板和 DataSourceUtils.getConnection 在连接池环境中管理数据库连接的正确方法。
我做了什么:
我们正在使用 apache dbcp 进行连接 pooling.In 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 是 Spring 实现描述 here。
以上配置在本地运行良好,但我们对该程序的以下方面有点担心:
- 如果我们以这种方式访问连接,它会覆盖 appconfig 文件中的连接池机制吗?
- 根据文档 here,DataSourceUtils.getConnection(DataSource dataSource) 将重用现有连接。所以我假设这不会破坏通过 JdbcTemplate 和 dbcp 对象创建的任何连接。
- 不需要显式释放此连接,因为它由 jdbcTemplate 管理。
我对上面提到的项目不是很确定。需要一些专家意见。
我建议使用 JdbcTemplate#execute(ConnectionCallback action) 方法。这允许您访问连接,同时仍然利用 Spring 的资源和异常管理功能。您只需要实现 doInConnection
回调方法。
jdbcTemplate.execute(new ConnectionCallback<Object>() {
@Override
public Object doInConnection(Connection connection)
throws SQLException, DataAccessException {
// do your processing here
return null;
}
});
Spring JDBC 提供各种实用程序来调用具有自定义 SQL 数据类型的存储过程:
我不确定下面是使用 Jdbc 模板和 DataSourceUtils.getConnection 在连接池环境中管理数据库连接的正确方法。
我做了什么:
我们正在使用 apache dbcp 进行连接 pooling.In 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 是 Spring 实现描述 here。
以上配置在本地运行良好,但我们对该程序的以下方面有点担心:
- 如果我们以这种方式访问连接,它会覆盖 appconfig 文件中的连接池机制吗?
- 根据文档 here,DataSourceUtils.getConnection(DataSource dataSource) 将重用现有连接。所以我假设这不会破坏通过 JdbcTemplate 和 dbcp 对象创建的任何连接。
- 不需要显式释放此连接,因为它由 jdbcTemplate 管理。
我对上面提到的项目不是很确定。需要一些专家意见。
我建议使用 JdbcTemplate#execute(ConnectionCallback action) 方法。这允许您访问连接,同时仍然利用 Spring 的资源和异常管理功能。您只需要实现 doInConnection
回调方法。
jdbcTemplate.execute(new ConnectionCallback<Object>() {
@Override
public Object doInConnection(Connection connection)
throws SQLException, DataAccessException {
// do your processing here
return null;
}
});
Spring JDBC 提供各种实用程序来调用具有自定义 SQL 数据类型的存储过程: