Spring JDBC 与 JDBC

Posted

技术标签:

【中文标题】Spring JDBC 与 JDBC【英文标题】:Spring JDBC vs JDBC 【发布时间】:2010-08-09 18:07:35 【问题描述】:

我一直在尝试使用 spring 3.0 SimpleJdbcTemplate,插入 1500 条记录需要 5 分钟,而我需要几秒钟。使用直接 JDBC 插入。不知道我做错了什么。

【问题讨论】:

这不是问题,也没有提供任何代码供我们审查,您希望我们如何帮助您?请考虑提供更多详细信息。 并不是说插入需要5分钟,但是当你在“直jdbc”之上使用任何框架时会有延迟。发布您的查询/代码,以便我们了解发生了什么。 【参考方案1】:

如果您正在构建批处理,请考虑使用带有适当块大小设置的 Spring 批处理 - JdbcBatchItemWriter,它将在不到一秒的时间内加载这 1500 条记录。

【讨论】:

【参考方案2】:

一些值得检查的事情:

开销可能在 Spring 在应用程序级别管理的事务上。查看您使用的是哪种事务管理器(查找名称为 transactionManager 的 bean)。如果您使用的是 JTA,那可能就是您的问题所在。由于 JDBC 速度很快,因此瓶颈似乎不是 db。 根据您的应用程序使用该事务的方式,它可能会在完成所有 1500 个请求和提交之前将所有内容保存在内存中。您是否发现内存使用量有很大差异(Spring 应该高很多)? 在这两种情况下,您使用的是哪种数据库连接池?

快速分析您的应用的方法:

获取pid - "jps -l"

内存:jmap -histo PID(检查是否存在某种形式的内存泄漏)

检查后台发生了什么:jstack PID(查找缓慢或递归的方法调用)

【讨论】:

【参考方案3】:

如何使用

jdbcTemplate.batchUpdate(new String[]sql); 

【讨论】:

以上是关于Spring JDBC 与 JDBC的主要内容,如果未能解决你的问题,请参考以下文章

Spring整合JDBC以及AOP管理事务

Spring整合JDBC以及AOP管理事务

spring整合JDBC

JDBC Spring中的Bad Sql Grammar异常

PreparedStatementCallback; JDBC Spring 中的错误 SQL 语法

jdbc spring 安全性,apache commons dbcp