我正在使用JNDI配置和JDBCtemplate,它们在Spring Boot应用程序中是自动连接的。
连接创建成功。但是当我们执行保存或搜索操作时,它失败并显示以下错误:
org.springframwwork.dao.RecoverableDataAccessException: CallableStatementCallback; SQL [] Closed Connection ; nested exception is java.sql.SQLRecoverableException: Closed Connection
我也尝试了以下stackoverflow解决方案,但是它没有用。
What is the cause of "RecoverableDataAccessException" received when checking health of database?
请找到以下用于连接的context.xml配置:
<Resource name="jdbc/xyz"
auth="Container"
type="javax.sql.DataSource"
driverClassName="oracle.jdbc.OracleDriver"
factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
url=""
username=""
password=""
minActive="30"
maxActive="100"
minIdle="10"
maxIdle="10"
initialSize="10"
jmxEnabled="true"
timeBetweenEvictionRunsMillis="30000"
minEvictableIdleTimeMillis="30000"
maxWait="10000"
logAbandoned="true"
testOnBorrow="true"
testOnConnect="false"
suspectTimeout="120"
validationQuery="select 1 from dual"
validationInterval="30000"
initSQL="select 1 from dual"
removeAbandoned="true"
removeAbandonedTimeout="60"
maxAge="180000"
accessToUnderlyingConnectionAllowed="true">
</Resource>
也尝试在context.xml中将maxWait更改为-1。
JdbcTemplate成功地自动接线。大多数情况下,搜索操作都可以正常工作,但是当我们执行保存操作时,如上所述,它会由于SQLRecoverableException而失败。
我正在使用jdbcTemplate对象创建SimpleJdbcCall对象,然后执行它以将详细信息保存在oracle数据库中。
SimpleJdbcCall save = new SimpleJdbcCall(jdbcTemplate).withProcedureName("xxpqr_abc")
.withCatalogName("xxpqr__xx_abc").withoutProcedureColumnMetaDataAccess()
.declareParameters(new SqlParameter("abc", OracleTypes.ARRAY, "abc1"),
new SqlParameter("xyz", OracleTypes.ARRAY, "xyz1"),
new SqlOutParameter("error_msg", Types.VARCHAR));
Map<String, Object> saveResult = save.execute(
new MapSqlParameterSource().addValue("pqr", new SqlArrayValue(empDetailsArray))
.addValue("pqr", saveObj.getSubmitFlag()));
在执行过程中出现了java.lang.NullPointerException。
如果使用单独的类使用spring @configuration注释创建的连接,则相同的操作可以正常工作。但这不提供连接池。