使用Java连接远程MongoDB服务器

5

我正在尝试连接到远程的mongodb实例,但它一直抛出错误。

Java代码:

Mongo mongo = new Mongo("172.234.52.24");
DB db = mongo.getDB("myDB");
collection = db.getCollection("myCollection");

但我一直收到以下异常:
java.io.IOException: couldn't connect to [/172.234.52.24:27017] bc:java.net.ConnectException: Connection refused

我需要做其他事情吗?当我尝试访问数据库或在mongo侧更改某些权限时设置用户名/密码?这只是在ubuntu服务器上正常安装的mongo,没有添加任何配置或权限。

附加信息: mongo 172.234.52.24:8888也不起作用,显示异常:连接失败。我可以ping到另一个主机,并知道mongo正在运行。

有任何想法吗? 谢谢!


端口开着吗?为什么要尝试连接到 172.234.52.24:88888888 不是默认端口。请参考 http://docs.mongodb.org/manual/tutorial/configure-linux-iptables-firewall/ 配置 Linux iptables 防火墙。 - WiredPrairie
从你这边看,“mongo 172.234.52.24”可行吗?如果你通过ssh登录到服务器,那么“mongo localhost”是否可行? - A. Jesse Jiryu Davis
5个回答

7
我找到问题的原因了……你们提供了很好的建议,但问题更根本。
在远程服务器上的我的Mongo配置文件中,有一个绑定IP变量设置为本地IP。一旦我注释掉它,一切就正常了。
非常感谢你们所有人!

嘿,exxodus7!你能分享一下你是如何解决这个问题的细节吗? - Chiran
@Chiran 打开 mongod 配置文件,位于 /etc/mongod.conf,然后注释掉 bind_ip=127.0.0.1 行。 - slownage
谢谢@slonage,它确实有效,只需要在编辑文件后重新启动mongod服务。 - sachingupta

1
请确保您已在pom.xml中正确添加了以下Maven依赖项: 1. spring-data-mongodb(1.5.2.RELEASE) 2. mongo-java-driver(2.13.0)
只需更新以下Java代码中的凭据,即可使其正常工作。下面代码中的"$external"表示您正在尝试连接远程Linux机器上的数据库。
下面的代码可以在独立的Java程序中运行。
String database = "TestDev";
    String username = "user@test.COM";
    String pass = "XXXXX";
    char[] password = pass.toCharArray();

    try {

        List<ServerAddress> serverAddresses = new ArrayList<ServerAddress>();
        ServerAddress address = new ServerAddress("hostname", portnumber);
        serverAddresses.add(address);
        List<MongoCredential> credentials = new ArrayList<MongoCredential>();
        MongoCredential credential = MongoCredential.createPlainCredential(username, "$external", password);
        credentials.add(credential);
        MongoClient mongoClient1 = new MongoClient(serverAddresses, credentials);
        DB db = mongoClient1.getDB(database);
        System.out.println(db.getCollectionNames());


        System.out.println("Done");
    } catch (UnknownHostException e) {
        e.printStackTrace();
    }

1

使用Java Web应用程序连接到远程MongoDB数据库。以下代码肯定会对您有所帮助。

在使用下面的代码之前,请添加一个包含凭据和其他必需细节的属性文件。在spring-config.xml文件中读取该属性文件。您可以使用以下代码来读取属性文件 -

<context:property-placeholder location='classpath:/config/configTest.properties'/>

@配置 public class MongoConfiguration extends AbstractMongoConfiguration{

@Value("${mongodb.dbname}")
private String  dbName;

@Value("${mongodb.host}")
private String  host;

@Value("${mongodb.port}")
private Integer port;

@Value("${mongodb.username}")
private String  userName;

@Value("${mongodb.password}")
private String  password;

@Value("${mongodb.authenticationdatabase}")
private String  authenticationDatabase;

@Override
protected String getDatabaseName()  {
    return this.dbName;
}

@Override
public MongoClient mongo() throws Exception {
    List<ServerAddress> serverAddresses = new ArrayList<ServerAddress>();
    ServerAddress address = new ServerAddress(host, port);
    serverAddresses.add(address);
    List<MongoCredential> credentials = new ArrayList<MongoCredential>();
    MongoCredential credential = MongoCredential.createPlainCredential(userName, authenticationDatabase, password.toCharArray());
    credentials.add(credential);
    return new MongoClient(serverAddresses, credentials);
}

@Override
@Bean
public SimpleMongoDbFactory mongoDbFactory() throws Exception {
    return new SimpleMongoDbFactory(mongo(), getDatabaseName());
}

@Override
@Bean
public MongoTemplate mongoTemplate() throws Exception {

    final MongoTemplate mongoTemplate = new MongoTemplate(mongo(), getDatabaseName());
    mongoTemplate.setWriteConcern(WriteConcern.SAFE);
    return mongoTemplate;
}

0
以下对我有效:
private static final String DB_NAME = "yourDbName";

MongoClient mongo = new MongoClient();
DB db = mongo.getDB(DB_NAME);
collection = db.getCollection("myCollection");

数据库名称由驱动程序使用;连接字符串(172.234.52.24:27017)由客户端在查看数据时使用(MongoVue或MongoExplorer)。此外,请坚持使用端口27017。

编辑:我正在使用Java的MongoDriver进行连接。


0
如果推荐的答案无效,请尝试在位于/etc/mongod.conf的mongod.conf文件中设置bindIp:0.0.0.0
编辑: 显然,晚发帖子,没有其他解决我的问题的答案,一行答案是不够的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接