Aks*_*kur 6 java mysql ssh spring spring-boot
在我的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
Run Code Online (Sandbox Code Playgroud)
这样,我就可以连接到数据库了。
现在,我想通过连接到另一个数据库SSH tunnel。我应该如何指定spring.datasource.url以获得这样的连接?
请注意,我不想编写任何样板 Java 代码来执行此 SSH 隧道!
PS 我用谷歌搜索但找不到满意的答案。
小智 12
如果您正在寻找的话,我认为 spring 无法为您创建 SSH 隧道。如果你想在代码中完成,你需要像jsch这样的框架。
最好的解决方案是在服务器上手动或使用 autossh 创建 SSH 隧道(以保持其正常运行)。要手动创建隧道,请登录到您的应用程序服务器并在屏幕中运行以下命令:
ssh -L 3307:localhost:3306 serverIp
Run Code Online (Sandbox Code Playgroud)
3306是mysql运行的端口。3307 是您要转发的端口。有了这个隧道,您现在可以使用以下方式进行连接:
spring.datasource.url=jdbc:mysql://localhost:3307/
Run Code Online (Sandbox Code Playgroud)
和我有同样的问题。
我的解决方案解决了,
第 1 步:在 VPC公有子网内创建ec2 实例
步骤 2:在安全组中,此 ec2 实例必须允许端口 22 (SSH)
步骤3: RDS MySQL必须允许ec2实例访问的私有IP
第 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
Run Code Online (Sandbox Code Playgroud)
例子:
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
Run Code Online (Sandbox Code Playgroud)
第5步:在文件配置application-dev.yml中
将主机从公共 dns更改为内部 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已连接
为我工作。^____^
| 归档时间: |
|
| 查看次数: |
17431 次 |
| 最近记录: |