Java 使用ssh隧道连接数据库(spring-datasou
2022-10-18 本文已影响0人
欠抽的泡面
一、引入maven
<dependency>
<groupId>com.jcraft</groupId>
<artifactId>jsch</artifactId>
<version>0.1.55</version>
</dependency>
二、连接工具类
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
public class SshConnection {
//跳板机
String username = "root";
String password = "1234";
String host = "172.31.196.10";
int port = 3023;
//本地连接端口
int local_port = 3307;
//远程数据库
String remote_host = "172.122.41.110";
int remote_port = 3306;
Session session;
/**
* 建设SSH连贯
*/
public void init() {
try {
JSch jsch = new JSch();
session = jsch.getSession(username, host, port);
session.setPassword(password);
session.setConfig("StrictHostKeyChecking", "no");
session.connect();
session.setPortForwardingL(local_port, remote_host, remote_port);
System.out.println("ssh隧道配置: localhost:" + port + " -> " + remote_host + ":" + remote_port);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 断开SSH连贯
*/
public void destroy() {
this.session.disconnect();
}
}
三、监听类
import org.springframework.stereotype.Component;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
@WebListener
@Component
public class SshContextListener implements ServletContextListener {
private SshConnection sshConnection;
@Override
public void contextInitialized(ServletContextEvent arg0) {
System.out.println("==========>Context initialized...");
try {
sshConnection = new SshConnection();
sshConnection.init();
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void contextDestroyed(ServletContextEvent arg0) {
System.out.println("==========>Context destroyed...");
try {
sshConnection.destroy();
} catch (Exception e) {
e.printStackTrace();
}
}
}
四、修改数据库连接配置
注意是本地的3307
端口
spring.datasource.url=jdbc:mysql://127.0.0.1:3307/test?characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=1234
spring.datasource.driver-class-name=com.mysql.jdbc.Driver