当前位置: 首页 > 知识库问答 >
问题:

Quarkus:使用本机图像连接到cloudsql数据库(gcp)

高恺
2023-03-14

我已经为我的数据源设置了一个prod配置来连接到GCP MySQL实例,基本上遵循以下教程:https://quarkus.io/guides/deploying-to-google-cloud#using-cloud-sql

配置为:

%prod.quarkus.datasource.db-kind=other
%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.datasource.jdbc.additional-jdbc-properties.cloudSqlInstance=my:gcloudconnection:string
%prod.quarkus.datasource.jdbc.additional-jdbc-properties.socketFactory=com.google.cloud.sql.mysql.SocketFactory

我还把它加到了maven上:

    <dependency>
        <groupId>com.google.cloud.sql</groupId>
        <artifactId>mysql-socket-factory</artifactId>
        <version>1.4.0</version>
    </dependency>

    <dependency>
        <groupId>io.quarkus</groupId>
        <artifactId>quarkus-container-image-jib</artifactId>
    </dependency>

然后我用

./mvnw package -Dquarkus.container-image.build=true -Dquarkus.native.container-build=true -Dmaven.test.skip

然后我将图像推送到我的GCP注册表,并从GoogleRun启动它。

这部分工作得很好!

关键是,我希望使用本机映像,因此我将 -Pnative 添加到 maven 命令中。

从那里开始,第一个问题是MySQL工厂库不是由graal导入的,因为没有对它的显式引用。所以我必须在夸克中手动注册:

@RegisterForReflection(targets = arrayOf(com.google.cloud.sql.mysql.SocketFactory::class))
class MyReflectionConfiguration {}

现在错误是

2021-11-10 11:14:08.027 HNEC
2021-11-10 10:14:08,025 WARN [org.hib.eng.jdb.env.int.JdbcEnvironmentInitiator] (JPA Startup Thread: <default>) HHH000342: Could not obtain connection to query metadata: java.sql.SQLNonTransientConnectionException: Could not create connection to database server.
2021-11-10 11:14:08.027 HNEC
at com.google.api.client.util.SecurityUtils.loadKeyStore(SecurityUtils.java:82)
Caused by: java.lang.NullPointerException
2021-11-10 11:14:08.027 HNEC
at com.google.api.client.googleapis.GoogleUtils.getCertificateTrustStore(GoogleUtils.java:86)

所以它指的是google-http-client与原生映像不兼容。lib中的行本身是

      InputStream keyStoreStream = GoogleUtils.class.getResourceAsStream("google.p12");

(所以这意味着GoogleUtils类包含在本机映像中,而不是google. p12文件中)。

我可以在我的应用程序中显式导入此文件(我尝试过;-)但没有成功),但我确信有更好的方法来处理它?

共有1个答案

葛兴发
2023-03-14

您应该创建一个<code>资源配置。json</code>,以包含.p12文件。

{
  "resources": [
    {
      "pattern": ".*\\.p12$"
    }
  ]
}

并在应用程序中添加以下配置。properties

quarkus.native.additional-build-args =-H:ResourceConfigurationFiles=resources-config.json

这是同样的官方文件。

 类似资料:
  • 当我用quarkus构建我的应用程序的本机映像时,我得到一个大小为150MB的可执行文件(关联的jar大小为12MB,我怀疑底层VM是否能弥补所有空间)。这是正常的还是我做错了什么?有没有办法像记录本机映像中加载的内容那样进行调查?

  • 我想用客户端管理我的heroku数据库。到目前为止,我已经使用实现了这一点。当我使用中的数据使用连接de DB时,我获得: 连接到服务器时出错:致命:数据库“Postgres”的权限被拒绝详细信息:用户没有CONNECT特权。 有关于如何实现连接的指导吗?

  • 我无法连接到我的。这是代码: 我得到了这个信息: 在学校,这个例子是有效的。问题出在哪里??

  • 我尝试用java连接到Oracle DB,但我遇到了错误,我搜索了很多次,我没有找到帮助我的东西。 当我尝试使用SQL developer连接时,它成功了。 因此,我尝试编写java代码来访问DB,它成功地连接到SSH,但当到达时,我遇到了错误: “java.sql.sqlException:Io异常:Oracle错误ORA-12650” 这是我的职能

  • 所以我正在尝试使用突出显示的连接进行连接。我使用密码'abcdefghijkl'登录到SQL环境。我正在尝试连接到名为“flight_school”的数据库 我的python脚本看起来就是这样。` 导入mysql.connector mydb=mysql.connector.connect(“localhost”,“root”,“abcdefghijkl”,“flight_school”“)打印(

  • 在我的项目中,当我运行后端时,使用Quarkus、Angular和PostgreSQL DB 这是我放在后端文件夹(Quarkus)中的“docker-compose.yml”文件: 但是当我构建一个Quarkus泊坞窗映像并尝试在泊坞窗容器中运行它时,它失败了!知道角度泊坞站容器运行良好,数据库也是如此。以下是我在运行容器后获得的错误日志: 使用 /opt/jboss/容器/java/运行/运行