在spring引导和jdbc模板中捕获SQLRecoverableException



我使用Spring引导v2.6.7和jdbc模板这是我的功能在服务:

@Override
public List<Invoice> getByDate(String date_debut, String date_fin) {
try {
return jdbcTemplate.query(GET_BY_DATE, ((rs, rowNum) -> {
return new Invoice(
rs.getString("CUST_CODE"),
rs.getString("CUST_NAME"),
rs.getString("CUST_ADDR1"), 
}), date_debut, date_fin);
} catch (Exception e) {
System.out.println("I am in catch");
return null;
}
}

问题是当数据库服务器关闭时,我得到这个异常:

java.sql.SQLRecoverableException: IO Error: The Network Adapter could not establish the connection (CONNECTION_ID=w52a0lyvRo6f+Jqqks8haw==)
at oracle.jdbc.driver.T4CConnection.handleLogonNetException(T4CConnection.java:872) ~[ojdbc8-21.3.0.0.jar:21.3.0.0.0]    
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:677) ~[ojdbc8-21.3.0.0.jar:21.3.0.0.0]
at oracle.jdbc.driver.PhysicalConnection.connect(PhysicalConnection.java:1039) ~[ojdbc8-21.3.0.0.jar:21.3.0.0.0]
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:90) ~[ojdbc8-21.3.0.0.jar:21.3.0.0.0]     
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:728) ~[ojdbc8-21.3.0.0.jar:21.3.0.0.0]
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:649) ~[ojdbc8-21.3.0.0.jar:21.3.0.0.0]
at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) ~[HikariCP-4.0.3.jar:na]
at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:364) ~[HikariCP-4.0.3.jar:na]
at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:206) ~[HikariCP-4.0.3.jar:na]
at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:476) ~[HikariCP-4.0.3.jar:na]
at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) ~[HikariCP-4.0.3.jar:na]
at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:115) ~[HikariCP-4.0.3.jar:na]
at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) ~[HikariCP-4.0.3.jar:na]
at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:159) ~[spring-jdbc-5.3.19.jar:5.3.19].

但是我得到了"我在catch"的信息。它在catch块中。问题是如何捕获java.sql.SQLRecoverableException异常。谢谢你的帮助

根据SQLRecoverableException,其Exception的子类型,因此在SQLRecoverableException的情况下,控制将始终转到您已定义的Exception块。(它会打印"I am in catch")。

如果你想要捕获SQLRecoverableException,那么你可以这样做,

@Override
public List<Invoice> getByDate(String date_debut, String date_fin) {
try {
return jdbcTemplate.query(GET_BY_DATE, ((rs, rowNum) -> {
return new Invoice(
rs.getString("CUST_CODE"),
rs.getString("CUST_NAME"),
rs.getString("CUST_ADDR1"), 
}), date_debut, date_fin);
}catch (SQLRecoverableException e) {
System.out.println("I am in SQLRecoverableException block");
return null; // either return or do something else 
}catch (Exception e) {
System.out.println("I am in catch");
return null;
}
}

相关内容

  • 没有找到相关文章

最新更新