【发布时间】: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