无法在关闭的teradata jdbc连接上调用方法

时间:2018-04-16 10:37:57

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

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

我看了几天的运行时异常,比如

  

引起:java.sql.SQLException:[Teradata JDBC Driver] [TeraJDBC 16.10.00.03] [错误1095] [SQLState HY000]无法在关闭连接上调用方法       at com.teradata.jdbc.jdbc_4.util.ErrorFactory.makeDriverJDBCException(ErrorFactory.java:95)〜[terajdbc4-16.10.00.03.jar!/:16.10.00.03]       at 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]       at 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]       at sun.reflect.GeneratedMethodAccessor63.invoke(Unknown Source)〜[na:na]       at 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]       at 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(未知来源)〜[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>

1 个答案:

答案 0 :(得分:0)

java.sql.Connection conn;
java.sql.Statement stmt;

try {
  stmt = conn.createStatement();
  stmt.executeQuery("SELECT USER");
} catch (SQLException e) {
    // ... open connection here
}