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

Spring Boot+Hibernate连接Google Cloud SQL遇应用默认凭证不可用错误

解决Spring Boot+Hibernate连接Google Cloud SQL的凭证问题

针对你遇到的java.sql.SQLNonTransientConnectionException(核心错误:The Application Default Credentials are not available),按以下步骤逐一排查:

1. 确认凭证路径配置的正确性

  • 必须在application.properties里用classpath:前缀指定resources下的凭证文件,比如:
    spring.cloud.gcp.credentials.location=classpath:your-service-account.json
    
    没有classpath:的话,Spring会按系统绝对路径查找,而resources下的文件打包后属于classpath资源,无法被找到。

2. 检查环境变量的干扰

  • Google Cloud SDK会优先读取GOOGLE_APPLICATION_CREDENTIALS环境变量,如果这个变量存在但指向的路径不对,会覆盖你在application.properties里的配置。
    • Windows终端执行:echo %GOOGLE_APPLICATION_CREDENTIALS%
    • Linux/macOS终端执行:echo $GOOGLE_APPLICATION_CREDENTIALS
      要么修正这个环境变量的路径,要么在配置里显式指定凭证路径强制覆盖。

3. 验证服务账号的权限

  • 你的服务账号必须拥有Cloud SQL Client角色(最低权限要求),否则即使凭证正确也无法建立连接。去Google Cloud控制台的IAM页面,给该服务账号添加这个角色。

4. 检查依赖是否完整

  • pom.xml里必须包含Spring Cloud GCP的核心starter和对应数据库的SQL starter,比如用PostgreSQL的话:
    <dependency>
        <groupId>com.google.cloud</groupId>
        <artifactId>spring-cloud-gcp-starter</artifactId>
    </dependency>
    <dependency>
        <groupId>com.google.cloud</groupId>
        <artifactId>spring-cloud-gcp-starter-sql-postgresql</artifactId>
    </dependency>
    
    缺少这些依赖的话,Spring的自动凭证加载机制不会生效。

5. 手动加载凭证排查文件问题

  • 如果自动加载还是失败,写个配置类手动加载凭证,验证文件是否能被读取:
    @Configuration
    public class CloudSqlCredentialConfig {
        @Bean
        public CredentialsProvider credentialsProvider() throws IOException {
            InputStream credentialStream = getClass().getResourceAsStream("/your-service-account.json");
            ServiceAccountCredentials credentials = ServiceAccountCredentials.fromStream(credentialStream);
            return FixedCredentialsProvider.create(credentials);
        }
    }
    
    如果这里抛出IO异常,说明文件路径错误或者JSON文件本身损坏(比如格式不对)。

6. 确认JDBC URL格式正确

  • Google Cloud SQL的JDBC URL有固定格式,以MySQL为例:
    spring.datasource.url=jdbc:mysql://google/your-db-name?cloudSqlInstance=你的项目ID:区域:实例名&socketFactory=com.google.cloud.sql.mysql.SocketFactory&user=数据库用户名&password=数据库密码
    
    PostgreSQL的话把socketFactory换成com.google.cloud.sql.postgres.SocketFactory,确保cloudSqlInstance参数完全匹配你的实例信息。

内容的提问来源于stack exchange,提问作者Peter Sabio

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 19:36:20