[英]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.