要从Java连接到MongoDB,我使用:
MongoClient mongoClient = new MongoClient("localhost", port);
而且效果很好。现在,我想连接到必须通过SSH登录的计算机上的MongoDB。我尝试为此使用JSch,这是我的代码:
String host = "host";
String user = "user";
String password = "pass";
int port = 22;
int tunnelLocalPort = 3309;
String tunnelRemoteHost = "host";
int tunnelRemotePort = 3306;
JSch jsch = new JSch();
Session session = jsch.getSession(user, host, port);
session.setPassword(password);
localUserInfo lui = new localUserInfo();
session.setUserInfo(lui);
session.connect();
session.setPortForwardingL(tunnelLocalPort, tunnelRemoteHost, tunnelRemotePort);
一切看起来都很好,我可以连接,但是这里有问题:
MongoClient mongoClient = new MongoClient("localhost", 27020);
List<String> databaseNames = mongoClient.getDatabaseNames();
LOG.info("DB names=" + databaseNames);
错误是:
Aug 21, 2014 4:12:29 PM com.mongodb.DBTCPConnector initDirectConnection
Warnung: Exception executing isMaster command on localhost/127.0.0.1:27020
java.io.IOException: couldn't connect to [localhost/127.0.0.1:27020] bc:java.net.ConnectException: Connection refused: connect
at com.mongodb.DBPort._open(DBPort.java:214)
我应该设置更多连接对象吗?当我检查session.isConnected()
输出为true
时,如何从Java中检查程序是否连接。当我使用PuTTY时,一切正常。
从上面的代码中,我认为您正在将远程3309端口隧道传输到3309(而不是27020)上的本地端口。
根据您的代码:
int tunnelLocalPort = 3309; String tunnelRemoteHost = "host"; int tunnelRemotePort = 3306;
也许先尝试不使用代码的整个练习: