当前位置: 首页 > 知识库问答 >
问题:

如果连接在spring JPA中关闭,如何重新连接数据库?

凤凡
2023-03-14
2016-07-30 21:27:12.434 ERROR 13553 --- [http-nio-8090-exec-8] o.h.engine.jdbc.spi.SqlExceptionHelper   : No operations allowed after connection closed.
2016-07-30 21:27:12.434  WARN 13553 --- [http-nio-8090-exec-5] o.h.engine.jdbc.spi.SqlExceptionHelper   : SQL Error: 0, SQLState: 08003
2016-07-30 21:27:12.434 ERROR 13553 --- [http-nio-8090-exec-5] o.h.engine.jdbc.spi.SqlExceptionHelper   : No operations allowed after connection closed.
2016-07-30 21:27:12.438 ERROR 13553 --- [http-nio-8090-exec-8] [.[.[.[.c.c.Go2NurseJerseyConfiguration] : Servlet.service() for servlet [com.cooltoo.config.Go2NurseJerseyConfiguration] in context with path [] threw exception [org.springframework.dao.DataAccessResourceFailureException: could not prepare statement; nested exception is org.hibernate.exception.JDBCConnectionException: could not prepare statement] with root cause

java.io.EOFException: Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost.
        at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:3119) ~[mysql-connector-java-5.1.25.jar!/:na]
        at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3570) ~[mysql-connector-java-5.1.25.jar!/:na]
        at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3559) ~[mysql-connector-java-5.1.25.jar!/:na]
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4110) ~[mysql-connector-java-5.1.25.jar!/:na]
        at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2570) ~[mysql-connector-java-5.1.25.jar!/:na]
        at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2731) ~[mysql-connector-java-5.1.25.jar!/:na]
        at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2815) ~[mysql-connector-java-5.1.25.jar!/:na]
        at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2155) ~[mysql-connector-java-5.1.25.jar!/:na]
        at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2322) ~[mysql-connector-java-5.1.25.jar!/:na]
        at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:82) ~[hibernate-core-4.3.11.Final.jar!/:4.3.11.Final]

我已经检查了数据库运行良好。当发生这种情况时,我必须重新启动我的spring-boot应用程序。我怎么检查问题是什么?为什么数据库连接被关闭了?如果发生这种情况,我是否可以重新连接数据库?下面是我的应用程序.属性:

spring.datasource.url=jdbc:mysql://192.168.99.100:3306/test?characterEncoding=utf8
spring.datasource.username=admin
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.max-active=150

共有1个答案

华良才
2023-03-14

这似乎是MySQL的常见错误。

1)将此内容添加到应用程序.属性中,然后查看其执行情况:

spring.datasource.testOnBorrow=true
spring.datasource.validationQuery=SELECT 1

在spring文档和这个stackoverflow问题中详细介绍了testOnBorrow。然而,我在Spring的文档中找不到validationQuery的引用,但它似乎起到了作用。

spring.datasource.testWhileIdle = true
spring.datasource.validationQuery = SELECT 1
spring.datasource.testWhileIdle = true
spring.datasource.validationQuery = SELECT 1
spring.datasource.timeBetweenEvictionRunsMillis = 3600000
 类似资料:
  • 问题:当我的spring应用程序运行时,同时数据库服务器停止/重新启动,然后db连接丢失并且从未恢复。 com.mysql.jdbc.exceptions.jdbc4.mysqlnontransientConnectionException:连接关闭后不允许任何操作。 服务mysql启动 问题:如何告诉spring在连接丢失后自动重新连接? 这是我的配置:

  • 我正在尝试使用ApacheDBCP2使用连接池。 我的最大总连接是5。我关闭每一个连接后,它被使用。 但在连接池中关闭5次连接后,我仍然获得连接。 关闭5个连接后,何时ping数据库以获取连接?或者,它将从连接池本身获取数据,而不访问数据库。 下面是我的示例代码片段。请纠正我对连池的理解。

  • 问题内容: 这是我要运行的示例代码: 有没有一种方法可以运行此方法而又不会从MySQL收到“ Too many connections”错误?我已经知道我可以以其他方式处理连接或拥有连接池。我只想了解如何正确关闭sqlalchemy的连接。提前致谢! 问题答案: 这是正确编写该代码的方法: 也就是说,是连接 工厂 和连接 池 ,而不是连接本身。当您说时,连接将 返回到Engine内的连接池 ,而实

  • 我有一个多线程应用程序,它使用producer类生成消息,之前我使用下面的代码为每个请求创建producer。其中KafkaProducer是新建的,每个请求如下: 然后我阅读了关于生产者的Kafka文档,并了解到我们应该使用单个生产者实例来获得良好的性能。 然后我在一个singleton类中创建了KafkaProducer的单个实例。 现在什么时候 或者我们如何在关闭后重新连接到生产者。问题是如

  • 问题内容: 我正在尝试进行AJAX调用(通过JQuery),这将启动一个相当长的过程。我希望脚本仅发送一个指示进程已开始的响应,但是JQuery在PHP脚本运行完成之前不会返回响应。 我已经尝试过使用“关闭”标头(如下),以及输出缓冲了。似乎都不起作用。有什么猜想吗?还是我需要在JQuery中做这件事? 问题答案: 以下PHP手册页(包括用户注释)建议了有关如何在不结束PHP脚本的情况下关闭与浏览

  • 我编写了以下代码来连接到Oracle数据库。这用于REST API。我正在连接的数据库的IDLE_TIME参数设置为30分钟(这不能更改)。如果数据库连接空闲超过30分钟,则会抛出以下错误:“java.sql.SQLRecoverableException: ClosedConnection”。抛出此错误后,API将停止工作。我如何解决这个问题?