Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用JDBC模板无法访问数据库时的SQLNonTransientConnectionException_Java_Spring - Fatal编程技术网

Java 使用JDBC模板无法访问数据库时的SQLNonTransientConnectionException

Java 使用JDBC模板无法访问数据库时的SQLNonTransientConnectionException,java,spring,Java,Spring,假设: private static NamedParameterJdbcTemplate jdbcTemplate; public static SqlRowSet foo(String value) { MapSqlParameterSource params = new MapSqlParameterSource(); params.addValue("paramName", value); String query = "SELECT * from m

假设:

  private static NamedParameterJdbcTemplate jdbcTemplate;

  public static SqlRowSet foo(String value) {

    MapSqlParameterSource params = new MapSqlParameterSource();
    params.addValue("paramName", value);
    String query = "SELECT * from myTable WHERE paramName = :value";

    try {
      SqlRowSet rs = jdbcTemplate.queryForRowSet(query, params);
      return rs;
    } catch (CannotGetJdbcConnectionException | DataAccessException e) {
      // do something 
    }
  }
这将使用Spring库JdbcTemplate与数据库交互。当与数据库的连接打开时,它工作得很好,但是如果连接关闭,则创建一个
SQLNonTransientConnectionException
异常(第
SqlRowSet rs=jdbcTemplate.queryForRowSet(query,params);

java.sql.SQLNonTransientConnectionException:无法连接到地址=(主机=本地主机)(端口=63306)(类型=主机):连接被拒绝
位于org.mariadb.jdbc.internal.util.exceptions.ExceptionMapper.get(ExceptionMapper.java:234)
位于org.mariadb.jdbc.internal.util.exceptions.ExceptionMapper.connException(ExceptionMapper.java:95)
位于org.mariadb.jdbc.internal.protocol.AbstractConnectProtocol.connectWithoutProxy(AbstractConnectProtocol.java:1203)
位于org.mariadb.jdbc.internal.util.Utils.retrieveProxy(Utils.java:560)
位于org.mariadb.jdbc.MariaDbConnection.newConnection(MariaDbConnection.java:174)
位于org.mariadb.jdbc.Driver.connect(Driver.java:92)
在com.zaxxer.hikari.util.DriverDataSource.getConnection上(DriverDataSource.java:136)
位于com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:369)
在com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:198)上
在com.zaxxer.hikari.pool.HikariPool.createPoolEntry上(HikariPool.java:467)
在com.zaxxer.hikari.pool.HikariPool.checkFailFast上(HikariPool.java:541)
在com.zaxxer.hikari.pool.HikariPool上。(HikariPool.java:115)
位于com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112)
位于org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:157)
位于org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:115)
位于org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:78)
位于org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:611)
位于org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:668)
位于org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:693)
位于org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate.queryForRowSet(NamedParameterJdbcTemplate.java:307)
我希望捕获异常,而不是打印堆栈跟踪。但是,添加一个
catch(SQLNonTransientConnectionException)
会给我一个错误,告诉我永远不会抛出此异常。如果我理解正确,这意味着Spring库中的某个地方有一个
printStackTrace
,并且我的方法从未抛出异常,因此除了修改Spring库之外,我不能做任何事情来捕获它


提前感谢您的帮助。

问题来自第390行的类
hikaripol.java

private void throwPoolInitializationException(Throwable t) {
    this.LOGGER.error("{} - Exception during pool initialization.", this.poolName, t);
    this.destroyHouseKeepingExecutorService();
    throw new HikariPool.PoolInitializationException(t);
  }
这将记录堆栈跟踪并将其显示到控制台。禁用此类的登录
应用程序。属性
可解决此问题

logging.level.com.zaxxer.hikari.pool=OFF

在catch块中添加一个通用异常怎么样。它将捕获所有异常。在catch块之后,创建另一个catch块
catch(Exception e)
@Silverfang,这不起作用,因为没有抛出异常。Spring将所有异常包装在
DataAccessException
中,因此显然尝试捕获它是不起作用的。另外,这不是从spring记录,而是从您的连接池记录。
logging.level.com.zaxxer.hikari.pool=OFF