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

非Spring Boot环境下Java连接Google Cloud MySQL求示例代码

非Spring Boot环境连接Google Cloud MySQL的实现方案

我完全理解你搜了好几天全是Spring Boot相关方案的郁闷——毕竟很多教程都默认大家用Spring生态,但纯Java环境连接Cloud SQL其实没那么复杂,正好适合你的自动化API测试场景。下面给你两种可行的方案和完整代码示例:

准备工作

先把基础配置搞定:

  • 确保你的Google Cloud项目里已经创建了MySQL类型的Cloud SQL实例,并且创建了测试用的数据库、账号(赋予足够的查询权限)
  • 下载MySQL JDBC驱动(推荐用8.0.x版本,适配最新的Cloud SQL MySQL实例)
  • 如果选代理方案,提前下载Cloud SQL Auth Proxy工具(Google Cloud官网可直接获取对应系统的版本)

方案一:使用Cloud SQL Auth Proxy(推荐)

这种方式不需要暴露Cloud SQL实例的公网IP,更安全,适合测试环境使用:

  1. 启动代理工具(命令行执行):

    # Linux/macOS
    ./cloud-sql-proxy your-project-id:your-region:your-instance-name
    
    # Windows
    cloud-sql-proxy.exe your-project-id:your-region:your-instance-name
    

    启动成功后,代理会把本地的3306端口转发到Cloud SQL实例的端口上。

  2. 构造JDBC连接URL:

    jdbc:mysql://127.0.0.1:3306/your-db-name?user=your-db-username&password=your-db-password&allowPublicKeyRetrieval=true&useSSL=false
    

    注:allowPublicKeyRetrieval=true是MySQL 8.0+版本可能需要的参数,防止连接报错。

方案二:直接通过公网IP连接

如果嫌代理麻烦,也可以直接用实例的公网IP连接,但需要先把测试机器的IP加入Cloud SQL实例的白名单(在Google Cloud控制台的Cloud SQL实例→连接→公网IP→添加网络):
构造JDBC连接URL:

jdbc:mysql://your-instance-public-ip:3306/your-db-name?user=your-db-username&password=your-db-password&useSSL=true

这种方式不够安全,不建议在生产环境使用,但临时测试可以用。

完整Java代码示例(用于自动化API测试)

下面是纯Java的连接、查询、校验代码,你可以直接集成到你的API测试框架里:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class CloudMySQLTestConnector {
    // 建议把这些配置放到环境变量或properties文件里,不要硬编码
    private static final String JDBC_URL = "jdbc:mysql://127.0.0.1:3306/test_db?user=test_user&password=test_pass&allowPublicKeyRetrieval=true&useSSL=false";

    // 获取数据库连接(使用try-with-resources自动关闭连接)
    private static Connection getDBConnection() throws Exception {
        // MySQL 8.0+ 可以不用显式加载驱动,DriverManager会自动加载
        // Class.forName("com.mysql.cj.jdbc.Driver");
        return DriverManager.getConnection(JDBC_URL);
    }

    // 根据ID查询用户名(用PreparedStatement防止SQL注入)
    public static String getUsernameById(int userId) throws Exception {
        String username = null;
        String querySql = "SELECT username FROM users WHERE id = ?";

        try (Connection conn = getDBConnection();
             PreparedStatement pstmt = conn.prepareStatement(querySql)) {

            pstmt.setInt(1, userId);
            try (ResultSet rs = pstmt.executeQuery()) {
                if (rs.next()) {
                    username = rs.getString("username");
                }
            }
        }
        return username;
    }

    // 自动化API测试校验示例:对比API返回数据和数据库数据
    public static void validateApiData(int apiReturnedUserId, String expectedUsername) {
        try {
            String actualUsername = getUsernameById(apiReturnedUserId);

            if (expectedUsername.equals(actualUsername)) {
                System.out.println("✅ 校验通过:API返回的用户ID对应的用户名与数据库一致");
            } else {
                System.err.println("❌ 校验失败:预期用户名是[" + expectedUsername + "],数据库查询结果是[" + actualUsername + "]");
            }
        } catch (Exception e) {
            System.err.println("❌ 数据库操作出错:" + e.getMessage());
            e.printStackTrace();
        }
    }

    // 测试入口
    public static void main(String[] args) {
        // 假设你的API返回的用户ID是1,预期用户名是"john_doe"
        validateApiData(1, "john_doe");
    }
}

关键注意事项

  • 避免硬编码敏感信息:把数据库账号、密码、JDBC URL放到环境变量或者配置文件中,比如用System.getenv("DB_PASSWORD")获取环境变量值
  • 防止SQL注入:一定要用PreparedStatement代替Statement,尤其是当参数来自API返回或用户输入时
  • 资源自动关闭:使用Java的try-with-resources语法,确保Connection、Statement、ResultSet等资源自动关闭,避免内存泄漏
  • 驱动版本兼容:如果你的Cloud SQL实例是MySQL 5.x版本,驱动要对应用5.x版本,并且驱动类是com.mysql.jdbc.Driver

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:26:02