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

Quarkus原生镜像连接GCP CloudSQL数据库缺失google.p12如何解决

Quarkus 原生镜像连接 GCP CloudSQL 报错解决方案

问题根因

你遇到的 NullPointerException 是因为 GraalVM 原生镜像默认不会将依赖包内的非Class类资源打包到镜像中,除非显式声明要包含的资源路径,google.p12 是 google-http-client 内置的证书文件,没有被默认纳入原生镜像导致加载失败。

方案一:快速修复现有配置

不需要修改现有依赖,只需要补充两项配置即可:

  1. 在 application.properties 中添加原生镜像资源包含规则,显式引入google.p12文件:
quarkus.native.resources.includes=com/google/api/client/googleapis/google.p12
  1. 若后续仍出现反射相关报错,在你现有的反射注册配置类中补充对应目标类即可,例如:
@RegisterForReflection(targets = [
    com.google.cloud.sql.mysql.SocketFactory::class,
    com.google.api.client.googleapis.GoogleUtils::class,
    com.google.api.client.util.SecurityUtils::class
])
class MyReflectionConfiguration

方案二:最优方案(推荐)

使用 Quarkus 官方维护的 Google Cloud Services 扩展,该扩展已经提前完成了所有 CloudSQL 相关的原生镜像适配,不需要手动处理反射、资源注册等问题:

  1. 替换依赖:删除你手动引入的 com.google.cloud.sql:mysql-socket-factory 依赖,新增官方扩展依赖:
<dependency>
    <groupId>io.quarkiverse.googlecloudservices</groupId>
    <artifactId>quarkus-google-cloud-services-cloud-sql</artifactId>
    <!-- 版本与你使用的Quarkus核心版本对齐即可 -->
</dependency>
  1. 修改数据源配置,删除原来手动添加的additional-jdbc-properties相关配置,改用扩展提供的配置项:
%prod.quarkus.datasource.db-kind=mysql
%prod.quarkus.datasource.jdbc.url=jdbc:mysql:///dbname
%prod.quarkus.datasource.jdbc.driver=com.mysql.cj.jdbc.Driver
%prod.quarkus.hibernate-orm.dialect=org.hibernate.dialect.MySQL5Dialect
%prod.quarkus.google.cloud.cloud-sql.instance-connection-name=my:gcloudconnection:string
%prod.quarkus.google.cloud.cloud-sql.enable-jdbc-socket-factory=true
  1. 删除你之前手动编写的@RegisterForReflection反射配置类,扩展已自动完成所有适配。

配置完成后直接使用带-Pnative的命令构建原生镜像即可正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 15:39:04