如何在JPA中重新打开连接

时间:2015-05-14 09:03:08

标签: java spring hibernate jpa spring-boot

我在SpringBoot中使用JPA进行应用。 当我丢失连接时,我的应用程序向我发送错误:

  

WARN 6812 --- [io-8080-exec-42] o.h.engine.jdbc.spi.SqlExceptionHelper:SQL错误:17002,SQLState:08006
  ERROR 6812 --- [io-8080-exec-42] o.h.engine.jdbc.spi.SqlExceptionHelper:IO错误:套接字读取时间   出来

建立连接后,我无法使用我的EntityManager,因为我得到:

  

WARN 6812 --- [io-8080-exec-50] o.h.engine.jdbc.spi.SqlExceptionHelper:SQL错误:17008,SQLState:08003
  ERROR 6812 --- [io-8080-exec-50] o.h.engine.jdbc.spi.SqlExceptionHelper:关闭连接

我的连接属性:

  

spring.datasource.driverClassName = oracle.jdbc.driver.OracleDriver
  spring.datasource.url = jdbc:oracle:thin:@ ...:..:..
  spring.datasource.username = ...
  spring.datasource.password = ...
  spring.datasource.test-on-borrow = true
  spring.datasource.test-while-idle = true
  spring.datasource.validation-query = SELECT 1;

如何重新连接该数据库连接?

1 个答案:

答案 0 :(得分:0)

尝试添加外部连接池,例如HikariCP,因为Spring Boot会自动检测并使用它:

  

如果HikariCP可用,我们将使用它。

如果您使用JDBC4驱动程序,连接池将在将连接交给您之前验证连接。如果您使用的是较旧的驱动程序,则需要设置此属性:

  

<强> connectionTestQuery

     

如果您的驱动程序支持JDBC4,我们强烈建议您不要设置它   属性。这适用于不支持JDBC4的“遗留”数据库   Connection.isValid()API。这是将要执行的查询   在从池中给出连接以验证之前   与数据库的连接仍然存在。再次尝试运行池   没有此属性,如果您的驱动程序是HikariCP将记录错误   不符合JDBC4,让你知道。默认值:无