在 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);
// 处理