通过 SSH 并使用 Spring Boot 连接到 MySQL

问题描述 投票:0回答:4

在我的

Spring Boot
应用程序 WAR 中,我有一个
application.properties
文件,其中我定义了以下
datasource
属性:

spring.datasource.url=jdbc:mysql://localhost/test?autoReconnect=true&useSSL=false&rewriteBatchedStatements=true
spring.datasource.username=used
spring.datasource.password=password
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

有了这个,我就可以连接到数据库了。

现在,我想通过

SSH tunnel
连接到另一个数据库。我应该如何指定
spring.datasource.url
才能获得这样的连接?

请注意,我不想编写任何样板 Java 代码来执行此 SSH 隧道!

附注我用谷歌搜索但找不到满意的答案。

java mysql spring spring-boot ssh
4个回答
12
投票

如果您正在寻找的话,我认为 spring 无法为您创建 SSH 隧道。如果你想在代码中完成,你需要像jsch这样的框架。

最好的解决方案是在服务器上手动或使用 autossh 创建 SSH 隧道(以保持其正常运行)。 要手动创建隧道,请登录到您的应用程序服务器并在屏幕中运行以下命令:

ssh -L 3307:localhost:3306 serverIp

3306是mysql运行的端口。 3307 是您要转发的端口。 有了这个隧道,您现在可以使用以下方式进行连接:

spring.datasource.url=jdbc:mysql://localhost:3307/

6
投票

和我有同样的问题。

我的解决方案已解决,

第1步:在VPC内创建ec2实例公共子网

第 2 步:安全组中 此 ec2 实例必须允许端口 22 (SSH)

第 3 步: RDS MySQL 必须允许私有 IP ec2 实例 才能访问

第 4 步: 在 Dev Local ~> 设置转发侦听器 tcp_ip 打开终端

ssh -f <user>@<ec2-public-dns> -L <localhost_ip>:<localhost_port>:<rds_mysql_host_ip>:<rds_mysql_host_port> -N -i <private_key>.pem

示例:

ssh -f ec2-user@ec2-public-dns -L dev-mysql-c-lib.internal:3306:***.ap-southeast-1.rds.amazonaws.com:3306 -N -i ~/.ssh/ec2-instance.pem

第5步:在文件配置application-dev.yml中

将主机从 public-dns 更改为 internal-dns

示例:

主机:'***.ap-southeast-1.rds.amazonaws.com'

主机:'dev-mysql-c-lib.internal'

spring.datasource.url: jdbc:mysql://dev-mysql-c-lib.internal:3306/mydb

终于可以运行 Spring Boot 了

查找 MySQL 已连接

为我工作。 ^____^


0
投票

我尝试了这个代码并成功了

try {
      Class.forName("com.mysql.jdbc.Driver");
            Connection conn =     DriverManager.getConnection("jdbc:mysql://<local_host_ip>:<local_arbitrary_port>/mydb",userName,password);
            System.out.println(conn.getMetaData().getUserName());
            return conn;
}catch(Exception e){
   e.printStackTrace();
}

-3
投票

与您在问题中使用的相同,但如果您的数据库使用自签名证书,则 useSSL=true 和可能 verifyServerCertificate=false 除外。

© www.soinside.com 2019 - 2024. All rights reserved.