无法从云功能连接MySQL数据库

问题描述 投票:0回答:1

我们正在将一些功能从我们的应用程序引擎项目中分离出来,并将其转移到谷歌云功能(GCF)。

我一生都无法从 GCF 获得数据库连接。 应用程序引擎应用程序和 GCF 中使用完全相同的代码。

数据库连接像这样初始化,这在应用程序引擎中有效:

String dbconn = "jdbc:mysql:///" + MYDBNAME + 
    "?cloudSqlInstance=" + PROJECTID + ":us-central1:" + INSTANCEID +
    "&socketFactory=com.google.cloud.sql.mysql.SocketFactory;

String uid = "xxx";
String pwd = "xxx";

config.setJdbcUrl( dbconn );
config.setUsername( uid );
config.setPassword( pwd );

ConnectionPool pool = new HikariDataSource( config );

这在应用程序引擎中完美运行。

但是,GCF 在日志中显示了这一点。

无法获取 jdbcUrl=jdbc:mysql:///MYDBNAME?cloudSqlInstance=PROJECTID:us-central1:INSTANCEID&socketFactory=com.google.cloud.sql.mysql.SocketFactory 的驱动程序实例

我还在 GCF 云控制台中配置了 SQL 连接。

enter image description here

pom.xml 文件包含 sql 类。

<dependency>
  <groupId>com.google.cloud.sql</groupId>
  <artifactId>mysql-socket-factory-connector-j-8</artifactId>
  <version>1.13.1</version>
  <scope>runtime</scope>
</dependency>
<dependency>
  <groupId>com.mysql</groupId>
  <artifactId>mysql-connector-j</artifactId>
  <version>8.0.33</version>
  <scope>runtime</scope>
</dependency>
jdbc google-cloud-functions google-cloud-sql
1个回答
0
投票

问题是我们没有加载 JDBC 驱动程序。 我们试图加载这个类,我们认为它是 JDBC 驱动程序。

Class.forName( "com.google.cloud.sql.mysql.SocketFactory" );

当我们添加这个时(经过几天的尝试和错误),它起作用了。

Class.forName( "com.mysql.cj.jdbc.Driver" );
© www.soinside.com 2019 - 2024. All rights reserved.