You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Hibernate新手求助:无法创建事务且连接被拒绝问题排查

解决Hibernate/MySQL连接被拒绝的问题

嘿,作为Hibernate新手碰到这种连接问题太正常了!我帮你拆解下日志里的核心问题——最关键的错误是:

java.net.ConnectException: Connection refused: connect

这说明你的Spring+Hibernate应用根本连不上MySQL数据库,下面是按优先级排序的排查步骤,一步步来应该就能解决:

  • 第一步:先确认MySQL服务真的在运行
    别觉得这是废话,这是最容易忽略的点!如果是Windows,打开服务列表(Win+R输入services.msc)找MySQL服务,看是不是处于“运行中”状态;如果是Linux/macOS,用systemctl status mysql(Linux)或者brew services list(macOS)检查状态。没启动的话先把服务开起来。

  • 第二步:核对数据库连接配置细节
    打开你的Spring配置文件(比如applicationContext.xml)或者Hibernate配置文件,仔细检查这几个参数:

    • 数据库主机地址:本地开发请确认是localhost或127.0.0.1,远程服务器要填正确的IP/域名
    • 端口号:MySQL默认是3306,如果你改过MySQL的端口,一定要同步到配置里
    • 数据库名称:确认你填的库名是已经创建好的,拼写没出错
    • 用户名和密码:账号密码是不是和MySQL里的一致,注意MySQL用户名默认区分大小写
  • 第三步:检查MySQL用户的访问权限
    有时候账号是对的,但这个账号没有权限从你的应用所在机器访问数据库。登录MySQL控制台,执行这条命令查看用户权限:

    SELECT user, host FROM mysql.user;
    

    本地开发的话,你的账号对应的host应该是localhost或%(允许任意主机)。如果是127.0.0.1,那用localhost连接可能会失败(因为localhost走Unix socket而非TCP/IP),这时候把配置里的主机改成127.0.0.1试试。

  • 第四步:排查防火墙和端口占用

    • 本地防火墙:Windows Defender或第三方防火墙有没有挡住3306端口?可以临时关闭防火墙测试,能连上的话再去配置端口放行规则
    • 端口占用:有没有其他程序占了3306端口?用netstat -ano | findstr :3306(Windows)或lsof -i :3306(Linux/macOS)查看,要是被占用了,要么停掉占用的程序,要么修改MySQL的端口
  • 第五步:核对JDBC URL格式
    不同版本的MySQL驱动对应的URL格式有差异,比如MySQL 8.0以上需要指定时区,给你个正确示例:

    jdbc:mysql://localhost:3306/your_db_name?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true
    

    别漏了必要参数,比如serverTimezone,不然也可能导致连接失败


附上你提供的完整错误日志:

SEVERE: Servlet.service() for servlet [spring] in context with path [/CRUDWebAppMavenized] threw exception [Request processing failed; nested exception is org.springframework.transaction.CannotCreateTransactionException: Could not open Hibernate Session for transaction; nested exception is org.hibernate.exception.JDBCConnectionException: Cannot open connection] with root cause java.net.ConnectException: Connection refused: connect at java.net.DualStackPlainSocketImpl.connect0(Native Method) at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79) at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) at java.net.Socket.connect(Socket.java:589) at java.net.Socket.connect(Socket.java:538) at java.net.Socket.<init>(Socket.java:434) at java.net.Socket.<init>(Socket.java:244) at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:253) at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:280) at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2026) at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:718) at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:46) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at com.mysql.jdbc.Util.handleNewInstance(Util.java:406) at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:302) at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:282) at org.apache.commons.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:82) at org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:256) at org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:816) at org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:115) at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:430) at org.springframework.orm.hibernate3.LocalDataSourceConnectionProvider.getConnection(LocalDataSourceConnectionProvider.java:81) at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:417) at org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:144) at org.hibernate.jdbc.JDBCContext.connection(JDBCContext.java:119) at org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:57) at org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1326) at org.springframework.orm.hibernate3.HibernateTransactionManager.doBegin(HibernateTransactionManager.java:555) at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:371) at org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:335) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:105) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202) at com.sun.proxy.$Proxy17.getAllStudent(Unknown Source) at com.joseph.controller.StudentController.setupForm(StudentController.java:25) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176) at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:426) at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:414) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644) at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549) at java

内容的提问来源于stack exchange,提问作者Akos Jozsa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:30:23