后端在docker容器中运行。它与弹簧靴和&安全和工作正常。前端也在另一个容器中运行。一切正常,直到突然冒出这个异常。在我闲置几分钟后(通常在5到10分钟之间),我才注意到这个异常。
WARN 1 --- [nio-8080-exec-2] o.h.engine.jdbc.spi.SqlExceptionHelper:SQL错误:0,SQLState:08S01
错误1 --- [nio-8080-exec-2] o.h.engine.jdbc.spi.SqlExceptionHelper:I / O错误:连接重置
错误1 --- [nio-8080-exec-2] o.a.c.c.C。[。[。[/]。[dispatcherServlet]:Servlet [dispatcherServlet]的Servlet.service()在上下文中,路径[]引发异常[请求处理失败;嵌套异常是org.springframework.dao.DataAccessResourceFailureException:无法提取ResultSet;嵌套异常是org.hibernate.exception.JDBCConnectionException:无法提取ResultSet]的根本原因
java.net.SocketException:连接重置 在java.net.SocketInputStream.read(SocketInputStream.java:209)〜[na:1.8.0_111-internal] 在java.net.SocketInputStream.read(SocketInputStream.java:141)〜[na:1.8.0_111-internal] 在java.io.DataInputStream.readFully(DataInputStream.java:195)〜[na:1.8.0_111-internal]
.....
始终可以使用与数据库的连接。奇怪的是,只有当我用docker运行我的项目时才会抛出此错误。如果我用eclipse&运行它node.js错误不会发生。我注意到的唯一一件事就是,在我进入并闲置几分钟后,当我尝试做某事时,我自动被掏空了。我不知道这是否与orgiginal错误有关。
application.properties
spring.datasource.url=databaseURL
spring.datasource.username=SQLusername
spring.datasource.password=Password
spring.datasource.driver-class-name=net.sourceforge.jtds.jdbc.Driver
spring.datasource.initialSize=100
spring.datasource.minIdle=10
spring.jpa.hibernate.naming_strategy=org.hibernate.cfg.EJB3NamingStrategy
spring.jpa.hibernate.naming.implicit-strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
spring.datasource.tomcat.max-active=250
spring.datasource.tomcat.max-wait=30000
spring.datasource.test-on-borrow=true
spring.datasource.test-while-idle=true
spring.datasource.minEvictableIdleTimeMillis=21600000
spring.datasource.timeBetweenEvictionRunsMillis=43200000
spring.datasource.connection-test-query=SELECT 1
spring.datasource.validationQuery=SELECT 1
我很高兴每一个有助于解决这个问题的建议。
答案 0 :(得分:0)
几个月前我遇到了同样的问题! 发生这种情况是因为 jvm 没有足够的内存来接受这个请求!
此错误是间歇性的,很难找到根本原因!
试试这个: 在你的 Dockerfile 中加入一些标志来解决它
ENTRYPOINT ["java","-XX:+TieredCompilation","-XX:TieredStopAtLevel=1", "-jar","yourJar.jar"]
此处有更多详细信息:https://jpbempel.github.io/2020/05/22/startup-containers-tieredcompilation.html
有时问题可能出在内存上。当您使用 java 启动容器时,jvm 默认堆内存是容器总内存的 1/4。 然后您可以使用标志 -XX:MaxRAMFraction,其中您的值的范围是 1 到 4。
此处有更多详细信息:https://merikan.com/2019/04/jvm-in-a-container/#java-8u131-and-java-9
祝你好运!