【问题标题】:Cannot call a method on closed teradata jdbc connection无法在关闭的 teradata jdbc 连接上调用方法
【发布时间】:2018-09-26 01:43:08
【问题描述】:

在我的 Spring Boot 项目中,我有时会失去与 teradata 数据库的连接。我想知道如何告诉 spring 关闭并再次打开连接。

经过几天的运行时异常,我看到了

原因:java.sql.SQLException: [Teradata JDBC Driver] [TeraJDBC 16.10.00.03] [Error 1095] [SQLState HY000] 无法在关闭的连接上调用方法 在 com.teradata.jdbc.jdbc_4.util.ErrorFactory.makeDriverJDBCException(ErrorFactory.java:95) ~[terajdbc4-16.10.00.03.jar!/:16.10.00.03] 在 com.teradata.jdbc.jdbc_4.util.ErrorFactory.makeDriverJDBCException(ErrorFactory.java:65) ~[terajdbc4-16.10.00.03.jar!/:16.10.00.03] 在 com.teradata.jdbc.jdbc_4.TDSession.prepareStatement(TDSession.java:1323) ~[terajdbc4-16.10.00.03.jar!/:16.10.00.03] 在 com.teradata.jdbc.jdbc_4.TDSession.prepareStatement(TDSession.java:1375) ~[terajdbc4-16.10.00.03.jar!/:16.10.00.03] 在 com.teradata.jdbc.jdbc_4.TDSession.prepareStatement(TDSession.java:1361) ~[terajdbc4-16.10.00.03.jar!/:16.10.00.03] 在 sun.reflect.GeneratedMethodAccessor63.invoke(未知来源)~[na:na] 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_162] 在 java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_162] 在 org.apache.tomcat.jdbc.pool.ProxyConnection.invoke(ProxyConnection.java:126) ~[tomcat-jdbc-8.5.20.jar!/:na] 在 org.apache.tomcat.jdbc.pool.JdbcInterceptor.invoke(JdbcInterceptor.java:108) ~[tomcat-jdbc-8.5.20.jar!/:na] 在 org.apache.tomcat.jdbc.pool.interceptor.AbstractCreateStatementInterceptor.invoke(AbstractCreateStatementInterceptor.java:75) ~[tomcat-jdbc-8.5.20.jar!/:na] 在 org.apache.tomcat.jdbc.pool.JdbcInterceptor.invoke(JdbcInterceptor.java:108) ~[tomcat-jdbc-8.5.20.jar!/:na] 在 org.apache.tomcat.jdbc.pool.DisposableConnectionFacade.invoke(DisposableConnectionFacade.java:81) ~[tomcat-jdbc-8.5.20.jar!/:na] 在 com.sun.proxy.$Proxy73.prepareStatement(Unknown Source) ~[na:na] 在 org.springframework.jdbc.core.JdbcTemplate$SimplePreparedStatementCreator.createPreparedStatement(JdbcTemplate.java:1521) ~[spring-jdbc-4.3.11.RELEASE.jar!/:4.3.11.RELEASE] 在 org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:627) ~[spring-jdbc-4.3.11.RELEASE.jar!/:4.3.11.RELEASE] ... 省略了 25 个常用帧

尝试访问数据库时。

我在访问数据库时使用了自动装配的 JdbcTemplate。我可以捕捉到异常,但我不知道如何告诉 spring 杀死并重新连接到数据库。

我正在使用以下依赖项。

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>com.teradata.jdbc</groupId>
        <artifactId>terajdbc4</artifactId>
        <version>16.10.00.03</version>
    </dependency>
    <dependency>
        <groupId>com.teradata.jdbc</groupId>
        <artifactId>tdgssconfig</artifactId>
        <version>16.10.00.03</version>
    </dependency>

搜索 stackoverflow 后,我找到了如何为不同数据库添加重新连接配置的示例,但不是为 teradata。我可以使用类似的配置吗?

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.7.RELEASE</version>
    <relativePath /> <!-- lookup parent from repository -->
</parent>

【问题讨论】:

    标签: java spring-boot spring-data-jpa teradata


    【解决方案1】:
    java.sql.Connection conn;
    java.sql.Statement stmt;
    
    try {
      stmt = conn.createStatement();
      stmt.executeQuery("SELECT USER");
    } catch (SQLException e) {
        // ... open connection here
    }
    

    【讨论】:

    • 感谢您的回答,但是我应该如何获得 spring-data-jpa 使用的连接?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-17
    • 2021-03-15
    • 1970-01-01
    • 2019-06-02
    • 2018-01-09
    • 2015-04-08
    • 2014-04-08
    相关资源
    最近更新 更多