springboot 数据库连接求助

「已注销」 2019-03-21 01:42:13
我有一个springboot工程(springboot+mybaties),运行时一切正常,第一次访问数据库接口时也正常,
但是过一会儿(大概几分钟事件)后再访问接口时报一下错误,找了很求一直没找到原因,故发帖求助,报错如下:


Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3b580277] was not registered for synchronization because synchronization is not active
2019-03-21 12:52:25.610 WARN 8560 --- [nio-8080-exec-5] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@359feb6c (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.
2019-03-21 12:52:30.612 WARN 8560 --- [nio-8080-exec-5] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@74a2e157 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.
2019-03-21 12:52:35.615 WARN 8560 --- [nio-8080-exec-5] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@459c501b (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.
2019-03-21 12:52:40.617 WARN 8560 --- [nio-8080-exec-5] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@148d1e18 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.
2019-03-21 12:52:45.618 WARN 8560 --- [nio-8080-exec-5] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@b7000e9 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.
2019-03-21 12:52:50.619 WARN 8560 --- [nio-8080-exec-5] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@2c4b9514 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3b580277]
2019-03-21 12:52:50.626 ERROR 8560 --- [nio-8080-exec-5] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException:
### Error updating database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLTransientConnectionException: HikariPool-1 - Connection is not available, request timed out after 30025ms.
### The error may exist in file [D:\Program Files\eclipse\workspace\MiniApp\target\classes\mapper\UserMapper.xml]
### The error may involve com.wenqiuhan.app.mapper.UserMapper.updateByPrimaryKeySelective
### The error occurred while executing an update
### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLTransientConnectionException: HikariPool-1 - Connection is not available, request timed out after 30025ms.] with root cause

com.mysql.cj.exceptions.ConnectionIsClosedException: No operations allowed after connection closed.
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:1.8.0_162]
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[na:1.8.0_162]
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:1.8.0_162]
at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[na:1.8.0_162]
at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:61) ~[mysql-connector-java-8.0.15.jar:8.0.15]
at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) ~[mysql-connector-java-8.0.15.jar:8.0.15]
at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:151) ~[mysql-connector-java-8.0.15.jar:8.0.15]
at com.mysql.cj.NativeSession.checkClosed(NativeSession.java:1263) ~[mysql-connector-java-8.0.15.jar:8.0.15]
at com.mysql.cj.jdbc.ConnectionImpl.checkClosed(ConnectionImpl.java:575) ~[mysql-connector-java-8.0.15.jar:8.0.15]
at com.mysql.cj.jdbc.ConnectionImpl.setNetworkTimeout(ConnectionImpl.java:2504) ~[mysql-connector-java-8.0.15.jar:8.0.15]
at com.zaxxer.hikari.pool.PoolBase.setNetworkTimeout(PoolBase.java:550) ~[HikariCP-3.2.0.jar:na]
at com.zaxxer.hikari.pool.PoolBase.isConnectionAlive(PoolBase.java:165) ~[HikariCP-3.2.0.jar:na]
at com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java:179) ~[HikariCP-3.2.0.jar:na]
at com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java:155) ~[HikariCP-3.2.0.jar:na]
at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:128) ~[HikariCP-3.2.0.jar:na]
at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:157) ~[spring-jdbc-5.1.5.RELEASE.jar:5.1.5.RELEASE]
at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:115) ~[spring-jdbc-5.1.5.RELEASE.jar:5.1.5.RELEASE]



后面还有一些输出都是at什么什么的,字数写不下就删了,
有前辈知道原因希望能够解答一下,百度了N久还是没解决,
...全文
1137 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
懒惰虫儿 2019-10-30
  • 打赏
  • 举报
回复
spring.datasource.hikari.minimum-idle=5 spring.datasource.hikari.maximum-pool-size=15 spring.datasource.hikari.auto-commit=true spring.datasource.hikari.idle-timeout=30000 spring.datasource.hikari.pool-name=DatebookHikariCP spring.datasource.hikari.max-lifetime=1800000 spring.datasource.hikari.connection-timeout=30000 spring.datasource.hikari.connection-test-query=SELECT 1
qq_36544920 2019-09-11
  • 打赏
  • 举报
回复
遇到了同样的问题,application.yml具体怎么配呢,配好就可以了嘛
「已注销」 2019-03-21
  • 打赏
  • 举报
回复
引用 10 楼 931828653 的回复:
你的是 springcloud吗 这是 配置文件无法解析配置属性 不太影响

哦哦,我的是springboot,谢谢解答,
931828653 2019-03-21
  • 打赏
  • 举报
回复
你的是 springcloud吗 这是 配置文件无法解析配置属性 不太影响
931828653 2019-03-21
  • 打赏
  • 举报
回复
没事 不影响
「已注销」 2019-03-21
  • 打赏
  • 举报
回复
引用 6 楼 931828653 的回复:
那你就设置下 连接池
# for initial,min,max
spring.datasource.initialSize=5
spring.datasource.minIdle=5
spring.datasource.maxActive=100
# sql for validating
spring.datasource.validationQuery=SELECT 1
# this will validate idle connection.if validation failed, will remove from pool
spring.datasource.testWhileIdle=true
spring.datasource.testOnBorrow=false
spring.datasource.testOnReturn=false
# max wait time
spring.datasource.maxWait=60000
spring.datasource.timeBetweenEvictionRunsMillis=30000

好像可以了,但是application.property对这些配置都报黄,是ide暂时不识别吗,
931828653 2019-03-21
  • 打赏
  • 举报
回复
要是还不行的话 , 在application.yml中添加配置: spring: datasource: dbcp2: validation-query: SELECT 1 time-between-eviction-runs-millis: 18800 如果使用的是tomcat连接池,那么修改dbcp2为tomcat即可。
931828653 2019-03-21
  • 打赏
  • 举报
回复
那你就设置下 连接池 # for initial,min,max spring.datasource.initialSize=5 spring.datasource.minIdle=5 spring.datasource.maxActive=100 # sql for validating spring.datasource.validationQuery=SELECT 1 # this will validate idle connection.if validation failed, will remove from pool spring.datasource.testWhileIdle=true spring.datasource.testOnBorrow=false spring.datasource.testOnReturn=false # max wait time spring.datasource.maxWait=60000 spring.datasource.timeBetweenEvictionRunsMillis=30000
「已注销」 2019-03-21
  • 打赏
  • 举报
回复
引用 2 楼 maradona1984 的回复:
没见过这种连接池
看错误是应用使用了已经关闭的连接,检查下连接池的配置呗,或者代码

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
「已注销」 2019-03-21
  • 打赏
  • 举报
回复
引用 2 楼 maradona1984 的回复:
没见过这种连接池
看错误是应用使用了已经关闭的连接,检查下连接池的配置呗,或者代码

springboot加mybaties呀,
「已注销」 2019-03-21
  • 打赏
  • 举报
回复
引用 1 楼 931828653 的回复:
你这里和数据库的连接Connection是一个Static的,程序共享这一个Connection。所以第一 次对数据库操作没问题,当把Connection关闭后,第二次还想操作数据库时Connection肯定不存在了。(每次开启tomcat后第一次能成功,刷新之后第二次就报了错)
把con.close()注释了之后,看还会不会报错

这个连接是springboot默认配置,我也没写连接的dao啊,我感觉你的答案直接复制过来的,之前百度看到的一模一样....
maradona1984 2019-03-21
  • 打赏
  • 举报
回复
没见过这种连接池
看错误是应用使用了已经关闭的连接,检查下连接池的配置呗,或者代码
931828653 2019-03-21
  • 打赏
  • 举报
回复
你这里和数据库的连接Connection是一个Static的,程序共享这一个Connection。所以第一 次对数据库操作没问题,当把Connection关闭后,第二次还想操作数据库时Connection肯定不存在了。(每次开启tomcat后第一次能成功,刷新之后第二次就报了错) 把con.close()注释了之后,看还会不会报错

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧