2010-08-09 78 views
6

我一直在试图使用spring 3.0 SimpleJdbcTemplate,并且需要5分钟来插入1500条记录,而这需要我几秒钟的时间。使用直接JDBC插入。不知道我做错了什么。Spring JDBC vs JDBC

+1

你可以通过你的代码吗? – dierre 2010-08-09 18:09:23

+6

这不是一个问题,也没有提供任何代码供我们仔细检查,您如何期望我们能够帮助您?请考虑提供更多细节。 – Andrew 2010-08-09 18:10:04

+0

不是说应该花费5分钟才能插入,但是当您在“直接jdbc”之上使用任何框架时会有延迟。发布您的查询/代码,以便我们可以看到发生了什么。 – 2010-08-09 18:33:23

回答

6

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

1

有些事情值得一试:

  • 开销可能会在应用程序级别由Spring管理事务。看看你正在使用什么样的事务管理器(找一个名字为transactionManager的bean)。如果您使用JTA,那可能就是您的问题所在。由于JDBC速度很快,瓶颈似乎不是数据库。
  • 根据您的应用程序如何使用该事务,它可能会在完成所有1500个请求和提交之前将所有内容都放在内存中。你是否看到内存使用的巨大差异(Spring应该高得多)?
  • 在任何一种情况下您使用的是哪种数据库连接池?

快速的方法来分析您的应用程序:

获取pid - "jps -l"

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

检查什么引擎盖下回事:jstack PID (寻找缓慢或递归的方法调用)

-2

如何使用

jdbcTemplate.batchUpdate(new String[]{sql});