druid1.2.8 mybatis plus 3.4.2
异常信息:
Cause: java.sql.SQLNonTransientConnectionException: (conn=2829758) Connection reset ; (conn=2829758) Connection reset; nested exception is java.sql.SQLNonTransientConnectionException: (conn=2829758) Connection reset at org.springframework.jdbc.support.SQLExceptionSubclassTranslator.doTranslate(SQLExceptionSubclassTranslator.java:81) at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72) at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81) at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:88) at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:440) at com.sun.proxy.$Proxy189.selectList(Unknown Source) at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:223) at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.executeForMany(MybatisMapperMethod.java:173) at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:78) at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148) at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)
druid 配置如下: druid: #以下是全局默认值,可以全局更改 #监控统计拦截的filters filters: stat initial-size: 10 min-idle: 20 max-active: 50 max-wait: 60000 max-idle: 30 keep-alive: true keep-alive-between-time-millis: 45000 time-between-eviction-runs-millis: 45000 #一个连接在池中最小生存的时间 min-evictable-idle-time-millis: 300000 validation-query: SELECT 'x' test-while-idle: true test-on-borrow: false test-on-return: false pool-prepared-statements: false max-pool-prepared-statement-per-connection-size: 20 remove-abandoned: false stat: merge-sql: false log-slow-sql: true slow-sql-millis: 30000
原提问者GitHub用户lineagezd
据您提供的信息,您的应用程序使用的是 Druid 数据库连接池 1.2.8 版本和 MyBatis Plus 3.4.2 版本,在使用过程中出现了 Connection reset 的异常。
这种异常通常是由于数据库连接断开或网络异常等原因引起的。可能的原因和解决方法如下:
数据库连接过期:当数据库连接长时间闲置时,可能会因为一些服务端配置的原因,导致连接被断开。如果您的应用程序长时间没有使用数据库连接,则可能会出现 Connection reset 异常。建议使用 Druid 数据库连接池的 testWhileIdle 和 validationQuery 参数来检测连接是否有效,以避免连接过期的问题。
数据库连接池配置不合理:在使用 Druid 数据库连接池时,需要合理配置连接池参数,例如最大连接数、最小连接数、连接超时时间等。如果连接池参数配置不合理,可能会导致连接池无法正常工作或出现连接超时等问题。建议检查连接池配置是否合理,并根据实际情况进行调整。
网络或服务器问题:在一些情况下,网络或服务器问题可能会导致数据库连接出现问题,例如网络延迟、服务器负载过高等。建议检查网络和服务器状态,并进行必要的调整和优化。
数据库驱动版本不兼容:Druid 数据库连接池需要与数据库驱动版本兼容,否则可能会导致连接失败或连接超时等问题。建议检查您使用的数据库驱动版本是否与 Druid 数据库连接池兼容,并尝试升级或降级数据库驱动版本。
出现这种异常的原因可能是网络中断、数据库服务器关闭、连接超时等检查数据库服务器状态:确保您连接的数据库服务器正常运行,并且没有发生意外关闭或重启。您可以尝试连接到数据库服务器并执行一些简单的查询来验证其状态。
检查网络连接:确认网络连接是否稳定,以及应用程序服务器和数据库服务器之间的网络是否正常。网络中的任何问题都可能导致连接中断或重置。可以使用网络工具(如ping)测试网络连接的连通性。
调整连接池配置:根据您提供的Druid连接池配置,您可以尝试调整一些参数以优化连接池的性能和稳定性。例如,可以增加max-active参数的值来增加最大活动连接数,或增加max-wait参数的值来增加连接等待时间。请根据您的具体需求和数据库服务器的性能来调整这些参数。
检查数据库驱动和依赖项版本:确保您使用的数据库驱动程序和其他依赖项与MyBatis Plus和Druid的版本兼容。不同版本之间可能存在一些兼容性问题,可能会导致连接异常。。
看起来是在连接创建或是使用后的60s内再使用时,服务器或路由/防火墙端主动断开了连接。
打开 testOnBorrow就成了。
原回答者GitHub用户kimmking
根据异常信息,可以看出该问题发生在数据库连接重置的时候,可能是由于以下原因之一导致的:
此外,你还提供了Druid的配置信息,但没有提供MyBatis Plus的配置信息。如果以上的解决方案无法解决问题,你可以提供更详细的配置信息和代码片段,以便我们能够更好地帮助你解决这个问题。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。