返回

SSH隧道直连MySQL,Spring Boot连接更安全

mysql

通过 SSH 隧道和 Spring Boot 连接到 MySQL

在使用 Spring Boot 应用程序开发时,我们经常需要连接到外部数据库,比如 MySQL。为了确保数据的安全,我们可能希望通过 SSH 隧道建立连接。在本文中,我将逐步介绍如何配置 Spring Boot 应用程序,通过 SSH 隧道连接到 MySQL 数据库,而无需编写额外的 SSH 隧道 Java 代码。

SSH 隧道设置

SSH 隧道允许我们在本地计算机和远程服务器之间建立一个安全的连接。通过这个隧道,我们可以将本地计算机的端口映射到远程服务器的端口。在我们的例子中,我们将本地计算机的 3306 端口映射到远程 MySQL 服务器的 3306 端口。

步骤:

  1. 在本地终端或命令提示符中,输入以下命令:
ssh -L 3306:localhost:3306 user@remote_server

其中:

  • user 替换为远程服务器上的用户名
  • remote_server 替换为远程 MySQL 服务器的 IP 地址或主机名
  1. 输入密码以连接到远程服务器。

Spring Boot 数据源配置

一旦 SSH 隧道建立,我们就可以在 Spring Boot 应用程序中配置数据源来使用它。在 application.properties 文件中,将 spring.datasource.url 属性设置为:

spring.datasource.url=jdbc:mysql://localhost:3306/test?autoReconnect=true&useSSL=false&rewriteBatchedStatements=true

其中:

  • test 替换为 MySQL 数据库的名称

保留其他数据源属性(如用户名、密码和驱动程序类名)不变。

测试连接

重新启动 Spring Boot 应用程序。在应用程序日志中,你应该看到类似以下的连接信息:

Connected to the target database successfully

这表示 Spring Boot 应用程序已成功连接到远程 MySQL 数据库。

结论

通过使用 SSH 隧道和 Spring Boot,我们可以安全地连接到远程 MySQL 数据库,而无需编写额外的 Java 代码。这为开发人员提供了一种便捷且安全的方法,以便在本地环境中使用远程数据库资源。

常见问题解答

Q1:如何确保 SSH 隧道一直处于活动状态?

A1: 在 SSH 隧道命令中添加 -N 参数,它将在后台运行隧道。

Q2:如果 Spring Boot 应用程序无法连接到数据库,该怎么办?

A2: 检查 SSH 隧道是否已正确建立,并且本地 MySQL 端口未被其他进程占用。

Q3:是否可以在不使用 SSH 隧道的 Spring Boot 应用程序中使用相同的 MySQL 连接信息?

A3: 不,使用 SSH 隧道时,连接信息必须使用本地 MySQL 端口(3306),而不是远程 MySQL 端口。

Q4:如何将 SSH 隧道集成到 Spring Boot 测试中?

A4: 使用 Testcontainers 等库,它可以自动创建和管理 SSH 隧道和 Docker 容器。

Q5:我遇到的其他问题如何解决?

A5: 参考 MySQL 和 Spring Boot 的官方文档,或在网上搜索解决问题的方案。