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 次 |
最近记录: |