正在处理Spring Boot应用程序。在执行负载测试时,出现错误
“ ORA-01000:最大打开游标已超出”
我们在pom.xml文件中有以下用于spring boot和jdbc的条目
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.6.RELEASE</version>
</parent>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.2.0.3</version>
</dependency>
为了解决这个问题,我尝试将“ ojdbc”从6更改为8。
<dependency>
<groupId>com.oracle.jdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>12.2.0.1</version>
</dependency>
但是我仍然遇到同样的问题。
我们使用“ jdbcTemplate”或“ namedParameterJdbcTemplate”进行的所有后端调用。
正在寻找解决此问题的建议。
我的第一个建议是将包括Spring JDBC和JPA版本在内的更新Spring Library升级到最新版本。春季JPA的早期版本无法正确关闭游标。
通常由于未清理resultsets
,语句或连接而发生此问题。您创建的每个ResultSet都在后端使用光标。如果您从未关闭ResultSet,创建它的Statement或用于该语句的Connection,则这些游标将永远不会关闭。当您使用连接池时,连接永远不会物理关闭,因此游标也永远不会关闭。
什么原因导致在JDBC java-中解决ora-01000 maximum open cursors exceeded java.sql.SQLException
问题
Statement
对象会导致打开的游标数量最大超出了java.sql.SQLException,PreparedStatement
对象会导致最大打开游标超出了java.sql.SQLException,CallableStatement
对象会导致最大打开游标超出了java.sql.SQLException,ResultSet
对象并且不关闭JDBC连接对象可能导致超出最大打开游标java.sql.SQLException