我在旧版本上运行了很多测试(任何版本< = 3.1.2使用3.0.5和新的spring-jdbc-.jar(使用4.1.4的任何版本> 3.1.2)并在使用日志级别TRACE进行测试之后&在DEBUG模式下运行管理以识别导致瓶颈的spring-jdbc-.jar代码。
在org.springframework.jdbc.core.JdbcTemplate#batchUpdate(java.lang.String,org.springframework.jdbc.core.BatchPreparedStatementSetter)中的行号-755(4.1.4版本)的JDBCTemplate.java中的代码是与3.0.5版本相比运行缓慢。然而,两者都试图达到同样的目标。
//below is the piece of code getting executed
if(rowsAffectedArray < batchSize) {
pss.setValues(ps, rowsAffectedArray);
if(ipss == null || !ipss.isBatchExhausted(rowsAffectedArray)) {
var11.add(Integer.valueOf(ps.executeUpdate()));
++rowsAffectedArray;
continue;
}
}
这个while循环遍历小于批量大小的行列表(在我们的例子中是50k)在预准备语句中设置值。当批量增加时,差异很大。
我在互联网上搜索并试图找到spring jdbc代码的任何区别来解读这个但没有多大帮助。向更广泛的受众发送此信息,以便找到根本原因。