gpt4 book ai didi

java - DataSource的getConnection()忽略端口

转载 作者:行者123 更新时间:2023-11-29 11:57:35 24 4
gpt4 key购买 nike

我尝试通过 ssh 隧道创建与远程服务器的连接。在我的尝试中,我同时使用了 jsch 和 putty。

int sshPort = 22;

Connection conn = null;
Session session = null;

try {
//Set StrictHostKeyChecking property to no to avoid UnknownHostKey issue
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");

JSch jsch = new JSch();
session = jsch.getSession("sshUser", "sshHost", sshPort);
session.setPassword(sshPassword);
session.setConfig(config);
session.connect();

session.setPortForwardingL(8806, "127.0.0.1", 3306);

BasicDataSource basicDataSource = new BasicDataSource();
basicDataSource.setDriverClassName("com.mysql.jdbc.Driver");
//I can type here any value of port, does not matter connection will be created on port 3306
basicDataSource.setUrl("jdbc:mysql://localhost:8806/db");
basicDataSource.setUsername("user");
basicDataSource.setPassword("password");
}

从这段代码中,我预计一些 sshHost:22 将在 localhost:8806 中可用。

但我得到的不是这个 connection = dataSource.getConnection(); ,而是始终连接到 localhost:3306 上的数据库。

enter image description here

正如我之前所说,我也尝试通过 Putty 连接 - 结果相同,通过代码连接会忽略端口。

附注Putty 的隧道仅在我通过 IDEA 的数据库工具连接到“localhost:8806”时才起作用。

P.P.S。感谢@Cool建议现在我可以从代码中创建一个隧道。但 dataSource 继续忽略该端口。

最佳答案

您应该将“8806”转发到“3306”而不是“22”端口。所以我现在无法测试它,但你应该使用以下行

session.setPortForwardingL(8806, "sshHost", 3306);

顺便说一句,您可以使用以下内容,而不需要腻子等。

ssh sshUser@sshHost -L 8806:localhost:3306

关于java - DataSource的getConnection()忽略端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32954347/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com