我正在一个项目中,我们正在优化使用样板jdbc代码的旧代码库,在我们的新项目中,我们使用springs jdbcTemplate。我发现旧版代码中的查询时间快了一倍,并且很好奇它的jdbcTemplate是否出错或其他原因...
我们使用apache commons BasicDataSource(提供池)。我的问题是,我不太确定池是否真正正常工作。以下是我的配置...
数据源
数据源接线
要对此进行分析,我将启动应用程序并连接所有jdbc内容,并简单地运行同一查询100次。我还使用log4j获取有关实际性能的一些指标。 1行将打印实际的jdbc调用时间,并且我在整个jdbcTemplate调用周围附加了一个包装器,以查看整个事情花费了多长时间(如下所示)...
编辑:添加RowMapper的图像
下面显示了我的日志的样子...
DEBUG org.springframework.jdbc.core.JdbcTemplate - Executing prepared SQL query
DEBUG org.springframework.jdbc.core.JdbcTemplate - Executing prepared SQL statement [my select query]
DEBUG org.springframework.jdbc.datasource.DataSourceUtils - Fetching JDBC
Connection from DataSource
DEBUG com.custom.frameworkx.spring.datasource.DebugDataSource - before executeQuery() sql=my select query
DEBUG com.custom.frameworkx.spring.datasource.DebugDataSource - after executeQuery() [time=30ms] sql=my select query
DEBUG com.custom.frameworkx.spring.datasource.DebugDataSource -
DebugResultSet.close()
DEBUG org.springframework.jdbc.datasource.DataSourceUtils - Returning JDBC Connection to DataSource
Full jdbcTemplate call time: 119
请注意实际查询时间如何花费 30 毫秒。但是整个jdbcTemplate调用需要 119 毫秒。我假设这是来自jdbcTemplate的开销,例如添加+释放资源,所以我猜这可能是可以接受的,但是在此代码的旧版中,整个连接创建+查询+资源释放的速度仍然是原来的两倍。
在通过org.springframework.jdbc.datasource.DataSourceUtils.java进行调试时,我看到代码转到第328行,对我而言,这看起来并不像是将连接返回到池中以便以后重用,这是springs jdbcTemplate的预期行为吗?在我看来,如果池正在工作,它应该到达第323行。