Spring 5.0.1 namedJdbcTemplate batchUpdate ORA-01000:超过最大打开游标

Posted

技术标签:

【中文标题】Spring 5.0.1 namedJdbcTemplate batchUpdate ORA-01000:超过最大打开游标【英文标题】:Spring 5.0.1 namedJdbcTemplate batchUpdate ORA-01000: maximum open cursors exceeded 【发布时间】:2017-10-31 20:29:27 【问题描述】:

我最近将我的项目从 Spring Framework 4.3.10 升级到了 5.0.1。 升级后,namedParameterJdbcTemplate.batchUpdate 开始失败并出现此错误

ORA-01000: 超出最大打开游标数。

批量更新 250 条记录的时间没有改变,并且在 Spring 4.3.x 中运行良好。

有没有人在 Spring 5.0.1 中遇到过类似的问题?

我没有看到 Spring 文档中与使用 batchUpdate 相关的任何更改。

任何线索或者它是jire问题的候选者。

我已将 spring-jdbc 单独回滚到版本 4.3.10,从而解决了该问题。 我还提出了一个 Jira 回归缺陷https://jira.spring.io/browse/SPR-16139

【问题讨论】:

天哪,为什么你会同时打开这么多游标?读完后应该关闭未使用的游标,你知道吗? 似乎经常和spring一起报道,但不是在版本更改后tomkaspblog.wordpress.com/tag/jdbctemplate***.com/questions/1436436/… 【参考方案1】:

通过 Spring JIRA 票证交换信息后,以下解决了该问题:

    升级到最新的 Oracle JDBC 驱动程序 12.2.0.1 (ojdbc8.jar) 使用条目创建 spring.properties 文件:spring.jdbc.getParameterType.ignore=true

Oracle 驱动程序升级解决了游标泄漏问题。 spring.properties 文件解决了 spring-jdbc 版本 5.0.1 的性能问题。

我希望 spring-jdbc 5.0.2 中会有一些更改,无需创建自定义 spring.properties 文件即可解决问题。

感谢 Spring 团队的 Juergen Hoeller 解决了这个问题。

【讨论】:

他们解决了这个问题吗? 我们需要在哪里创建 spring.properties ?【参考方案2】:

是的,该问题已在 Spring 5.0.2 中解决:

https://github.com/spring-projects/spring-framework/issues/20687

【讨论】:

需要将 spring.properties 添加到资源文件夹中。同时在 Spring Boot 中,需要将条目添加到现有的 application.yaml 中。对于较新版本的 Spring,我认为问题不存在。

以上是关于Spring 5.0.1 namedJdbcTemplate batchUpdate ORA-01000:超过最大打开游标的主要内容,如果未能解决你的问题,请参考以下文章

带有 Spring Boot 和 websphere 8.5.0.1 的 JPA 2.1

org.springframework.beans.factory.UnsatisfiedDependencyException 使用 Spring web-mvc 5.0.1.RELEASE 和 H

得到了JdkVersion classNotFoundException

使用 Spring JPA / Hibernate 进行条件插入

Spring框架bean的注解管理方法

使用纯Java配置SSM框架实现基本的增删改查(不使用spring XML)