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的主要内容,如果未能解决你的问题,请参考以下文章
JDBC Spring中的Bad Sql Grammar异常