走近SSH之Hibernate--com.mysql.jdbc.CommunicationsException: Communications link failure due to underlyi

2023-05-16

    进行java的学习已有几个月的时间了,可还是感觉使用vs+sqlserver开发比较舒服,最近学习java框架,接触了很多新概念,遇到各式各样的问题真有些不习惯,提示都是英文字母+阿拉伯数字,不过通过一个一个词翻译也能理解出现的错误是什么意思。


   今天由于mysql的编码问题,我不小心重装了mysql,装完后在建立数据库表的时候,出现下面这样一个问题:

14:22:02,783 ERROR SchemaExport:202 - schema export unsuccessful
com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception: 


** BEGIN NESTED EXCEPTION ** 


java.net.SocketException
MESSAGE: java.net.ConnectException: Connection refused: connect


STACKTRACE:


java.net.SocketException: java.net.ConnectException: Connection refused: connect
at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:156)
at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:284)
at com.mysql.jdbc.Connection.createNewIO(Connection.java:2565)
at com.mysql.jdbc.Connection.<init>(Connection.java:1485)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:266)
at java.sql.DriverManager.getConnection(DriverManager.java:582)
at java.sql.DriverManager.getConnection(DriverManager.java:154)
at org.hibernate.connection.DriverManagerConnectionProvider.getConnection(DriverManagerConnectionProvider.java:110)
at org.hibernate.tool.hbm2ddl.ManagedProviderConnectionHelper.prepare(ManagedProviderConnectionHelper.java:28)
at org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.java:180)
at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:133)
at com.tgbnode.hibernate.ExportDB.main(ExportDB.java:21)

** END NESTED EXCEPTION **


Last packet sent to the server was 20 ms ago.
at com.mysql.jdbc.Connection.createNewIO(Connection.java:2631)
at com.mysql.jdbc.Connection.<init>(Connection.java:1485)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:266)
at java.sql.DriverManager.getConnection(DriverManager.java:582)
at java.sql.DriverManager.getConnection(DriverManager.java:154)
at org.hibernate.connection.DriverManagerConnectionProvider.getConnection(DriverManagerConnectionProvider.java:110)
at org.hibernate.tool.hbm2ddl.ManagedProviderConnectionHelper.prepare(ManagedProviderConnectionHelper.java:28)
at org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.java:180)
at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:133)
at com.tgbnode.hibernate.ExportDB.main(ExportDB.java:21)


    通过错误提示,可以大概看出这是数据库无法连接的问题。通过查找问题的解决方法,发现异常“com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception”,出现的原因是:Mysql服务器默认的“wait_timeout”是8小时,也就是说一个connection空闲超过8个小时,Mysql将自动断开该 connection。这就是问题的所在,在C3P0 pools中的connections如果空闲超过8小时,Mysql将其断开,而C3P0并不知道该connection已经失效,如果这时有 Client请求connection,C3P0将该失效的Connection提供给Client,将会造成上面的异常。

最后在网上找到一个办法。为hibernate配置连接池,推荐用c3p0,然后配置c3p0的反空闲设置idle_test_period,只要小于MySQL的wait timeout即可。
在hibernate.cfg.xml中增加下面几项:

<!-- configuration pool via c3p0--> 
<property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property> 
<property name="c3p0.min_size">5</property> 
<property name="c3p0.max_size">30</property> 
<property name="c3p0.time_out">1800</property> <!-- seconds --><!-- default: 0 --> 
<property name="c3p0.max_statement">50</property> <!-- default: 0 --> 
<property name="c3p0.acquire_increment">1</property> <!-- default: 1 --> 
<property name="c3p0.idle_test_period">120</property> <!-- seconds --><!-- default: 0 --> 
<property name="c3p0.validate">true</property> 

按照提示设置好后,又遇到这样一个问题:

14:44:44,298  WARN BasicResourcePool:1222 - com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@6c69d02b -- Acquisition Attempt Failed!!! Clearing pending acquires. While trying to acquire a needed new resource, we failed to succeed more than the maximum number of allowed acquisition attempts (30).
14:44:44,311 ERROR SchemaExport:202 - schema export unsuccessful
java.sql.SQLException: Connections could not be acquired from the underlying database!
at com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:104)
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:236)
at com.mchange.v2.c3p0.PoolBackedDataSource.getConnection(PoolBackedDataSource.java:94)
at org.hibernate.connection.C3P0ConnectionProvider.getConnection(C3P0ConnectionProvider.java:35)
at org.hibernate.tool.hbm2ddl.ManagedProviderConnectionHelper.prepare(ManagedProviderConnectionHelper.java:28)
at org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.java:180)
at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:133)
at com.tgbnode.hibernate.ExportDB.main(ExportDB.java:21)
Caused by: com.mchange.v2.resourcepool.CannotAcquireResourceException: A ResourcePool could not acquire a resource from its primary factory or source.
at com.mchange.v2.resourcepool.BasicResourcePool.awaitAcquire(BasicResourcePool.java:970)
at com.mchange.v2.resourcepool.BasicResourcePool.checkoutResource(BasicResourcePool.java:208)
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:232)
... 6 more

这里提示的更清晰了,就是连接数据库不成功,这时候突然想起自己重装mysql时,端口号用的是3309,而我之前使用的端口号是3306,敲代码时使用的也是3306,将代码中的端口3306改为3309问题解决了。


Hibernate.cfg.xml配置文件连接数据库设置如下:

<hibernate-configuration>
	<session-factory>
		<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
		<!--Connect DB-->
		<property name="hibernate.connection.url">jdbc:mysql://localhost:3309/hibernate_hql</property>
		<property name="hibernate.connection.username">root</property>
		<property name="hibernate.connection.password">123456</property>
		<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
		<property name="hibernate.show_sql">true</property>
		<!-- 
		<property name="hibernate.format_sql">true</property>
		 -->
		 
		<mapping resource="com/tgbnode/hibernate/Student.hbm.xml"/>
		<mapping resource="com/tgbnode/hibernate/Classes.hbm.xml"/>
	</session-factory>
</hibernate-configuration>

Hibernate连接MySql,Hibernate代码中设置的端口应该与MySql数据库中的对应才能正常连接,这看似不起眼的问题,其实恰恰是全局观的展现,也是知识网的一种展现。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

走近SSH之Hibernate--com.mysql.jdbc.CommunicationsException: Communications link failure due to underlyi 的相关文章

随机推荐

  • python-求三角形的面积

    计算三角形的面积 法一 xff1a 计算三角形的面积 a 61 float input 39 输入三角形第一边长 xff1a 39 b 61 float input 39 输入三角形第二边长 39 c 61 float input 39 输
  • 如何把达梦8数据库安装在root用户下管理

    达梦数据库一般安装在dmdba用户下 xff0c 官方文档也是这么推荐的 那么有没有办法不创建dmdba用户 xff0c 直接安装在root下呢 xff1f 希望我不要把大家带偏 xff0c 只是本着研究学习的心态 xff0c 做个实验 结
  • The word 'localhost' is not correctly spelled 这个问题怎么解决

    有时工程中有下划线并提示 The word is not correctly spelled 此问题是MyEclipse校验单词拼写造成 xff0c 如果出在配置文件中 xff0c 一般会影响到程序的正常执行 解决方法 xff1a 在MyE
  • Seaship数据集+yolov5

    在SeaShip数据集上验证YoloV5 操作系统 xff1a ArchLinux 需要代理 1 conda安装配置 已经完成的小伙伴可以直接跳过 安装Anaconda yay安装 yay S anaconda 激活Anaconda环境 s
  • 对抗样本生成方法学习总结

    title 对抗样本生成方法 date 2023 03 21 15 08 46 tags pytorch 对抗样本 cover https s2 loli net 2023 03 20 TkeiAjqp3Jdg9tI png categor
  • 划词翻译简单实现

    环境 xff1a archlinux xff0c 其余linux系统类似 安装依赖 span class token function sudo span pacman S xsel span class token function su
  • 平凡的人生or开挂的人生——对知乎相关问题的回答

    知乎原题 xff1a 为什么有些人的人生和开了挂一样 xff1f https www zhihu com question 37106162 楼上说的都特别好 xff0c 我很想补充一点 我先抛出一个背景概念 我认为开挂人生 xff0c 本
  • ARM64启动过程分析

    文章目录 arm64启动过程分析arm64启动过程分析 xff08 一 xff09 boot protocolarm64启动过程分析 xff08 二 xff09 内核启动第一步arm64启动过程分析 xff08 三 xff09 创建启动阶段
  • Android Studio: Kotlin使用DataBinding异常

    异常 Error 7 30 Unresolved reference databinding E test Android Jetpack app src main java com mazaiting jetpack architectu
  • H5C3__元素垂直居中的方法

    在 CSS 中对元素进行水平居中是非常简单的 xff1a 如果它是一个行内元素 xff0c 就对它的父元素应用 text align center 如果它是一个块级元素 xff0c 就对它自身应用 margin auto 还有没有其他的方法
  • 2013年期中总结 2013年9月10日20:17:49

    题目中的时间 xff0c 我改了几次 xff0c 一直在想这半年来的经历 xff0c 我想我是成长着的吧 xff01 继上次总结 2012年年度总结 2013年2月25日21 49 44 xff0c 眨眼过去了半年 xff0c 细细想来这半
  • VMware安装Ubuntu20.04.5常见问题及解决方案

    文章目录 使用Xftp连接ubuntu系统ubuntu上安装指定版本nodejsubuntu设置连网ubuntu安装Java8ubuntu安装 deb格式软件ubuntu卸载 deb格式软件ubuntu中electron框架安装的缓存在如下
  • 关于行业代码对应表的数据库设计及导入(4位行业代码)

    最近使用asp net 43 sqlserver 43 layui前端框架完成了一个小页面 xff0c 其中有一个功能是需要将行业代码表导入倒数据库 看到这个行业代码表 xff0c 刚开始还真是无从下手 xff0c 经过查询找到一个页面是关
  • 当你不想学习的时候,来看看大脑是怎么想的《摘抄与所想》

    尽管科学家一个接一个的科研成果让我们对记忆有了越来越多的了解 xff0c 但直到今天 xff0c 科学家所发现的所谓大脑的秘密也只是冰山一角 xff0c 在很大程度上 xff0c 大脑和记忆仍是神秘的 研究人员认为 xff0c 记忆是一个过
  • English learning method ---学英语重中之重打通“任督二脉”

    漫漫十年艰辛路 xff0c 英语学习之旅 曾经秉承 路漫漫其修远兮 xff0c 吾将上下而求索 的信念 xff0c 初一那年了解到原来 xff08 a b c d e f g xff09 不仅仅读作 xff08 啊 xff0c 波 xff0
  • DRP过后,感受知识间的通性

    DRP视频看了不短的时间 xff0c 真正开始DRP的时间是7月17号 xff0c 至今两个月了 由于暑假期间英语的学习占得时间比较多 xff0c 所以DRP视频进行的很慢 9月11号看完了DRP所有的视频 xff0c 这个项目完成后最大的
  • English learning method ---我谈音标学习

    最近在想这样一个问题 xff1a 每个地方都有自己的方言 xff0c 有些方言我们完全听不懂 xff0c 但是他们当地人却可以交流的很好 xff1b 而非本地人说方言 xff0c 就要模仿他们的腔调 xff0c 模仿的多了说出来的味也就像了
  • English learning method ---如何加强听力

    在之前的一篇博客 English learning method 学英语重中之重打通 任督二脉 中主要讲述的是听力的重要性 xff0c 在这篇博客中主要讲述如何加强听力 学习理论 语言学习始于听 xff0c 小孩首先通过近两年的听来学习语言
  • 电脑软件--开机提示ntldr is missing的原因和解决方法

    早上一朋友打电话来说 xff1a 你赶紧帮我问问老师 xff0c 我这电脑开始提示ntldr丢失该怎么解决 xff0c 这是公司电脑 xff0c 最好不要重装系统 我一听 xff0c 感觉她不相信我的能力 xff0c 跟她解释 xff1a
  • 走近SSH之Hibernate--com.mysql.jdbc.CommunicationsException: Communications link failure due to underlyi

    进行java的学习已有几个月的时间了 xff0c 可还是感觉使用vs 43 sqlserver开发比较舒服 xff0c 最近学习java框架 xff0c 接触了很多新概念 xff0c 遇到各式各样的问题真有些不习惯 xff0c 提示都是英文