2013-05-30 181 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; 
}