我的第一个建议是将包括Spring JDBC和JPA版本在内的更新Spring Library升级到最新版本。春天的JPA早期版本无法正确关闭游标。
通常由于未清理resultsets
,语句或连接而发生此问题。您创建的每个ResultSet都在后端使用光标。如果您从未关闭ResultSet,创建它的Statement或用于该语句的Connection,则这些游标将永远不会关闭。在使用连接池时,连接从不会物理关闭,因此游标也不会关闭。
是什么导致JDBC Java解决ora-01000 maximum open cursors exceeded java.sql.SQLException
问题-
- 不关闭JDBC
Statement
对象可能会导致最大打开游标
超出了java.sql.SQLException,
- 不关闭JDBC
PreparedStatement
对象会导致最大打开
游标超出了java.sql.SQLException,
- 不关闭JDBC
CallableStatement
对象会导致最大打开
游标超出了java.sql.SQLException,
- 不关闭JDBC
ResultSet
对象并且不关闭JDBC
连接对象可能导致超出最大打开游标
java.sql.SQLException
Spring JdbcTemplate是否关闭连接? ……并非总是如此。
体面的开发人员通常知道他们必须尝试/捕获/最终确保他们清理连接,文件句柄或任何其他东西。但是,对于Java,您会听到“只需使用JdbcTemplate
!它为您完成了所有这些样板!”。在最长的时间里,我假设JdbcTemplate
除了清除结果集外还将清理连接。实际上,您会在网上看到很多。不过要小心!似乎并非如此,或者至少是数据源依赖的。。。如果您考虑它们的目的,这实际上是有道理的。
当您没有Spring管理的事务时,是的JdbcTemplate
将在Connection上调用close()
方法。但是,如果由于Springs事务管理而关闭了连接,则该连接将由Springs事务支持来处理,该事务也将在Connection上调用close()
。
编辑:
解决方法:
通过在数据库上执行以下SQL命令来增加数据库中的最大打开游标:
ALTER SYSTEM SET open_cursors = 1000 SCOPE=BOTH;
此示例将最大打开游标设置为1000。根据需要更改此值。
分辨率:
将Oracle JDBC驱动程序更新为最新版本(12.2.0.1)
有一个新版本的Oracle JDBC驱动程序,该驱动程序修复了游标泄漏。
,
好的,我终于得到了答案。我的项目与您的项目完全相同(Spring boot 2.1.6.RELEASE和ojdbc8 12.2.0.1),(另外还有Spring data jpa)和升级到2.2.5.RELEASE对我不起作用。
当我每次使用一定数量的数据(或以上)调用相同的函数时,都会遇到相同的异常-我试图通过将ojdbc版本升级到19.6.0.0,并添加spring config spring.jdbc来摆脱此错误。 .getParameterType.ignore,依此类推。他们都不适合我。
最后,我发现是jpa信息库方法的返回类型。最初,我的方法是这样的:
Stream<MyEntity> findByMyColumn(MyColumnType myColumnValue);
请注意,此存储库方法的返回类型为java.util.Stream。之所以将这种返回类型作为流获取,是因为仅在需要流传输时才使用此方法。
而且每次执行相同的过程时,堆栈跟踪都包含此方法,我感到很奇怪。
所以我将类型更改为List,错误是GONE !!!
List<MyEntity> findByMyColumn(MyColumnType myColumnValue);
我认为即使流结束,流仍在保留游标。显然,这是Spring引导或ojdbc上的错误,但是它们似乎都没有意识到或不愿意解决此问题。
希望对您的情况也有所帮助。
,
好的,这花了我很长时间才回来发布。
因此,对我来说,只需在pom.xml中输入以下内容即可解决此问题
<dependency>
<groupId>com.oracle.jdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>12.2.0.1</version>
</dependency>
有一段时间,当它无法正常工作时,我们意识到有另一个ojdbc7被环境拾取,并且由于其他一些依赖关系而被引入。因此,一旦我们抑制了ojdbc8的拾取,我们的问题就解决了。
,
升级到最新的oracle jdbc驱动程序可以解决此问题。我们已升级到:版本(12.2.0.1)
本文链接:https://www.f2er.com/2497402.html