6

我正在开发一个项目,我们正在优化使用样板 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 行,在我看来,这并不像它返回到池的连接以供以后重用,这是弹簧 jdbcTemplate 的预期行为?对我来说,如果池化工作正常,它应该达到第 323 行。

在此处输入图像描述

4

0 回答 0