2013-05-30 211 views
3

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

任何想法? 谢谢!

+0

是端口打开?你为什么试图连接到'172.234.52.24:8888?''8888'不是默认端口。 HTTP://docs.mongodb。org/manual/tutorial/configure-linux-iptables-firewall/ – WiredPrairie

+0

“mongo 172.234.52.24”是否支持你? 如果你ssh进入服务器,“mongo localhost”是否工作? –

回答

5

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

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

虽然非常感谢大家!

+0

嘿exxodus7!你能分享一下你如何解决问题的细节吗? – Chiran

+0

@Chiran打开mongod配置文件,在/etc/mongod.conf中,然后注释掉bind_ip = 127.0.0.1行 – slownage

+0

谢谢@slonage它的真正工作只需要在编辑文件后重新启动mongod服务。 – saching

0

对我来说,以下工作:

private static final String DB_NAME = "yourDbName"; 

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

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

编辑:我正在使用MongoDriver for java来连接。

0

确保您已在你的pom.xml 1.弹簧数据的MongoDB(1.5.2.RELEASE)2.蒙戈-Java的应用程序(2.13.0)

刚刚更新添加正确的Maven的依赖你的证书在下面的java代码中,它会为你工作。 下面的代码中的“$ external”表示您试图连接位于远程位置的Linux机器上的数据库。

下面的代码在独立的Java程序中工作。

String database = "TestDev"; 
    String username = "[email protected]"; 
    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(); 
    } 
0

使用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; 
}