簡體   English   中英

通過 SSH 連接到 MySQL 並使用 Spring Boot

[英]Connect to MySQL through SSH and by using Spring Boot

在我的Spring Boot app 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 隧道!

PS 我用谷歌搜索但無法在任何地方找到滿意的答案。

和我一樣的問題。

我的解決方案解決了,

第 1 步:在 VPC public su.net 中創建ec2 實例

第 2 步:安全組中,此 ec2 實例必須允許端口 22 (SSH)

第三步: RDS MySQL必須允許ec2實例訪問的private-ip

第 4 步:在 Dev Local ~> setup forward listener tcp_ip open terminal

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

在此處輸入圖像描述

第五步:在文件config 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 啟動

查找 MySQL已連接

為我工作。 ^____^

我認為spring不能為您創建SSH隧道。 如果要在代碼中執行此操作,則需要類似jsch的框架。

最好的解決方案是在服務器上手動創建SSH隧道或使用autossh(保持它正常運行)。 要手動創建隧道,請登錄到您的應用服務器並在屏幕上運行以下命令:

ssh -L 3307:localhost:3306 serverIp

3306是運行mysql的端口。 3307是您正在轉發的端口。 通過此隧道,您現在可以使用以下方法進行連接:

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

與您在問題中使用的相同,除了useSSL = true,如果數據庫使用自簽名證書,還可能用verifyServerCertificate = false。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM