Java 11迁移AppEngine后无法加载com.mysql.jdbc.GoogleDriver类求助
App Engine Java 11迁移后无法加载com.mysql.jdbc.GoogleDriver的解决办法
问题根源
Java 11版本的App Engine标准运行时已废弃旧的com.mysql.jdbc.GoogleDriver驱动类,同时appengine-web.xml里的<use-google-connector-j>配置在Java 11环境下完全失效——该配置仅针对Java 8及更早的App Engine旧运行时生效。
修复步骤
替换驱动类
把Hibernate配置里的驱动类从com.mysql.jdbc.GoogleDriver改成MySQL 8.x的标准驱动com.mysql.cj.jdbc.Driver,彻底放弃对Google特定驱动的依赖。删除无效配置
直接删掉appengine-web.xml中的<use-google-connector-j>true</use-google-connector-j>,留着只会造成配置混淆。修正JDBC连接串
使用标准的Cloud SQL连接格式,必须带上SocketFactory参数,示例:jdbc:mysql:///<你的数据库名>?cloudSqlInstance=<Cloud SQL实例连接名>&socketFactory=com.google.cloud.sql.mysql.SocketFactory&user=<数据库用户名>&password=<数据库密码>同时要在依赖中添加
mysql-socket-factory,版本需和你的mysql-connector-j 8.0.33匹配,比如在pom.xml里添加:<dependency> <groupId>com.google.cloud.sql</groupId> <artifactId>mysql-socket-factory</artifactId> <version>1.12.0</version> <!-- 选择与mysql-connector-j兼容的版本即可 --> </dependency>更新Hibernate配置
检查你的hibernate.cfg.xml或相关配置文件,确保驱动类和连接串配置正确,示例:<property name="hibernate.connection.driver_class">com.mysql.cj.jdbc.Driver</property> <property name="hibernate.connection.url">jdbc:mysql:///<数据库名>?cloudSqlInstance=<实例连接名>&socketFactory=com.google.cloud.sql.mysql.SocketFactory&user=<用户名>&password=<密码></property>
注意事项
- 确认
mysql-socket-factory版本和mysql-connector-j版本兼容,避免出现依赖冲突 - 本地测试时可通过Cloud SQL代理验证连接是否正常,再部署到App Engine
- 确保App Engine服务账号拥有Cloud SQL客户端角色权限
内容的提问来源于stack exchange,提问作者Vijay Chaudhari
相关产品推荐
相关产品推荐

