在 Spring Boot 项目中使用 SSH 连接到 MySQL 内部数据库所在的服务器

介绍

在开发过程中,经常需要将项目部署到远程服务器上,并使用远程数据库进行数据存储。而有些服务器为了安全考虑,不允许直接访问数据库,只允许通过 SSH 连接进行访问。本文将介绍如何在 Spring Boot 项目中使用 SSH 连接到 MySQL 内部数据库所在的服务器,并进行数据库操作。

准备工作

在开始之前,我们需要确保以下几个条件已满足:

  • 已经安装了 Java 开发环境,并且可以正常编译运行 Java 项目。
  • 已经安装了 MySQL 数据库,并创建了一个数据库实例。
  • 已经安装了 OpenSSH 服务器,并确保可以通过 SSH 登录到 MySQL 所在的服务器。

引入依赖

首先,在项目的 pom.xml 文件中引入 SSH 连接和 MySQL 驱动的依赖:

<dependencies>
    <!-- SSH 连接 -->
    <dependency>
        <groupId>com.jcraft</groupId>
        <artifactId>jsch</artifactId>
        <version>0.1.55</version>
    </dependency>
    <!-- MySQL 驱动 -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.27</version>
    </dependency>
</dependencies>

连接 SSH 服务器

首先,我们需要编写一个方法来连接 SSH 服务器,并返回一个已经建立连接的 Session 对象:

import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;

public class SSHUtil {
    public static Session connect(String host, int port, String username, String password) throws JSchException {
        JSch jsch = new JSch();
        Session session = jsch.getSession(username, host, port);
        session.setPassword(password);
        session.setConfig("StrictHostKeyChecking", "no");
        session.connect();
        return session;
    }
}

在这个方法中,我们使用 JSch 库来建立 SSH 连接,并指定服务器的主机名、端口、用户名和密码。注意,为了简化示例,我们将 StrictHostKeyChecking 设置为 "no",这样就不会检查主机密钥。在实际开发中,为了安全考虑,应该使用其他方式来管理主机密钥。

连接 MySQL 数据库

接下来,我们需要编写一个方法来连接 MySQL 数据库,并返回一个已经建立连接的 Connection 对象:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class MySQLUtil {
    public static Connection connect(String host, int port, String username, String password, String database) throws SQLException {
        String url = "jdbc:mysql://" + host + ":" + port + "/" + database;
        return DriverManager.getConnection(url, username, password);
    }
}

在这个方法中,我们使用 DriverManager.getConnection() 方法来建立数据库连接,并指定数据库的 URL、用户名和密码。

执行 SQL 查询

有了已经建立的 SSH 连接和 MySQL 连接,我们就可以执行 SQL 查询了。下面是一个示例方法,用于执行查询并返回结果集:

import java.sql.*;

public class QueryUtil {
    public static ResultSet executeQuery(Session session, Connection connection, String sql) throws SQLException {
        Statement statement = connection.createStatement();
        ResultSet resultSet = statement.executeQuery(sql);
        return resultSet;
    }
}

在这个方法中,我们使用 Connection.createStatement() 方法创建一个 Statement 对象,并使用它来执行 SQL 查询。然后,我们可以使用 ResultSet 对象来访问查询结果。

完整示例

下面是一个完整的示例,演示了如何使用 SSH 连接到 MySQL 内部数据库所在的服务器,并执行 SQL 查询:

import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;

import java.sql.*;

public class Application {
    public static void main(String[] args) throws JSchException, SQLException {
        // 连接 SSH 服务器
        Session session = SSHUtil.connect("localhost", 22, "username", "password");

        // 连接 MySQL 数据库
        Connection connection = MySQLUtil.connect("localhost", 3306, "username", "password", "database");

        // 执行 SQL 查询
        String sql = "SELECT * FROM table";
        ResultSet resultSet = QueryUtil.executeQuery(session, connection, sql);

        // 处理