使用java连接到远程mongodb服务器

时间:2013-05-30 17:21:24

标签: java mongodb networking mongodb-java

我正在尝试连接到远程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正在运行它。

有什么想法吗? 谢谢!

5 个答案:

答案 0 :(得分:7)

我明白了......你们都有很好的建议,但问题更为根本。

在远程服务器上的mongo配置文件中,有一个bind_ip变量设置为本地ip。一旦我评论了这一点,一切正常。

非常感谢大家!

答案 1 :(得分: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();
    }

答案 2 :(得分:1)

使用Java Web应用程序连接到远程MongoDB数据库。下面的代码肯定会帮助你。

在使用下面的代码之前,请添加具有凭据所有其他所需详细信息的属性文件。在spring-config.xml中读取该属性文件。您可以使用以下代码来读取属性文件 -

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

@Configuration 公共类MongoConfiguration扩展了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;
}

答案 3 :(得分:0)

以下适用于我:

private static final String DB_NAME = "yourDbName";

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

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

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

答案 4 :(得分:0)

万一建议的答案不起作用;尝试在/etc/mongod.conf

中的mongod.conf文件中设置bindIp:0.0.0.0