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

配置hibernate.cfg.xml连接Google Cloud MySQL实例报错求助

解决Hibernate连接Google Cloud SQL MySQL实例的配置问题

首先看你遇到的java.net.UnknownHostException: Google错误,核心问题出在JDBC URL的配置上——你写的jdbc:mysql://google/DB_Name里的google是无效的主机名,Google Cloud SQL的Socket Factory不需要指定真实的主机地址,正确的URL格式应该把主机部分留空或者用localhost。

正确的hibernate.cfg.xml配置

把你的连接配置改成下面这样:

<property name="connection.driver.class">com.mysql.cj.jdbc.Driver</property> <!-- 注意:MySQL 8+版本推荐使用cj包下的驱动,旧驱动已废弃 -->
<property name="connection.url">jdbc:mysql:///<DB_Name>?cloudSqlInstance=INSTANCE_CONNECTION_NAME&socketFactory=com.google.cloud.sql.mysql.SocketFactory&useSSL=false</property>
<property name="connection.username">User_Name</property>
<property name="connection.password">Password</property>
<!-- 可选:添加连接池优化配置,避免频繁创建连接 -->
<property name="hibernate.c3p0.max_size">10</property>
<property name="hibernate.c3p0.min_size">2</property>
<property name="hibernate.c3p0.timeout">1800</property>

关键注意事项

  • JDBC URL格式:主机部分用//(直接留空)或者//localhost即可,Socket Factory会自动处理和Cloud SQL实例的加密连接,不需要手动填写实例的IP或域名。
  • 依赖包必须齐全:你的项目里必须包含mysql-socket-factory依赖,否则Socket Factory无法正常工作。
    Maven依赖配置:
    <dependency>
        <groupId>com.google.cloud.sql</groupId>
        <artifactId>mysql-socket-factory</artifactId>
        <version>1.11.0</version> <!-- 建议使用最新稳定版 -->
    </dependency>
    
    Gradle依赖配置:
    implementation 'com.google.cloud.sql:mysql-socket-factory:1.11.0'
    
  • 权限与认证:
    • 如果你的应用部署在GCP内部(比如App Engine、GKE),会自动使用默认服务账号,只要给该账号分配Cloud SQL Client权限即可。
    • 如果是本地开发,需要先通过gcloud auth application-default login登录你的GCP账号,并且确保该账号有访问目标Cloud SQL实例的权限。
  • 驱动版本兼容:如果你的MySQL实例是8.0及以上版本,一定要使用com.mysql.cj.jdbc.Driver,旧的com.mysql.jdbc.Driver会存在兼容性问题。

快速排查步骤

  1. 确认INSTANCE_CONNECTION_NAME是GCP控制台里显示的实例连接名,格式为项目ID:区域:实例名,不要填错。
  2. 用纯JDBC代码测试连接,排除Hibernate的配置干扰:
import java.sql.Connection;
import java.sql.DriverManager;

public class TestCloudSqlConnection {
    public static void main(String[] args) {
        String url = "jdbc:mysql:///<DB_Name>?cloudSqlInstance=INSTANCE_CONNECTION_NAME&socketFactory=com.google.cloud.sql.mysql.SocketFactory&user=User_Name&password=Password";
        try (Connection conn = DriverManager.getConnection(url)) {
            System.out.println("连接Cloud SQL成功!");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
  1. 检查本地开发环境是否已经通过GCP CLI完成认证,或者部署环境的服务账号是否有足够权限。

内容的提问来源于stack exchange,提问作者Mehul Changani

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:44:27