简体   繁体   中英

MongoDB connectivity issue

I'm trying to connect to mongodb server which is running on remote Linux machine using java code,

public static void main(String[] args) {
    Properties prop = new Properties();
    try {           
        //load a properties file
        prop.load(new FileInputStream("src/main/resources/mongodb.properties"));            
        String server = prop.getProperty("server");
        String port = prop.getProperty("port");
        int portnum = Integer.parseInt(port);

        /**** Connect to MongoDB ****/
        MongoClient mongo = new MongoClient(server,portnum);
        System.out.println("Connected to database");

        /**** Get database ****/
        // if database doesn't exists, MongoDB will create it for you
        DB db = mongo.getDB("test");

        /**** Get collection / table from 'details' ****/
        // if collection doesn't exists, MongoDB will create it for you
        DBCollection table = db.getCollection("details");

        /**** Insert ****/
        // create a document to store key and value
        BasicDBObject document = new BasicDBObject();
        document.put("name", "test");
        document.put("age", 24);
        table.insert(document);

        /**** Find and display ****/
        BasicDBObject searchQuery = new BasicDBObject();
        searchQuery.put("name", "test");

        DBCursor cursor = table.find(searchQuery);

        while (cursor.hasNext()) {
            System.out.println(cursor.next());
        }


    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

}

It is working fine with my local mongo. But facing an issue while trying to connect with linux server.

Here is the error message,

Jan 18, 2016 12:23:02 AM com.mongodb.DBTCPConnector initDirectConnection
WARNING: Exception executing isMaster command on server:port
java.io.IOException: couldn't connect to [server port] bc:java.net.ConnectException: Connection refused: connect
    at com.mongodb.DBPort._open(DBPort.java:214)
    at com.mongodb.DBPort.go(DBPort.java:107)
    at com.mongodb.DBPort.go(DBPort.java:88)
    at com.mongodb.DBPort.findOne(DBPort.java:143)
    at com.mongodb.DBPort.runCommand(DBPort.java:148)
    at com.mongodb.DBTCPConnector.initDirectConnection(DBTCPConnector.java:548)
    at com.mongodb.Mongo.getMaxBsonObjectSize(Mongo.java:620)
    at com.mongodb.DBApiLayer$MyCollection.insert(DBApiLayer.java:254)
    at com.mongodb.DBApiLayer$MyCollection.insert(DBApiLayer.java:226)
    at com.mongodb.DBCollection.insert(DBCollection.java:75)
    at com.mongodb.DBCollection.insert(DBCollection.java:59)
    at com.mongodb.DBCollection.insert(DBCollection.java:104)
    at com.filecompare.util.MongoDBConnection.main(MongoDBConnection.java:42)

Jan 18, 2016 12:23:03 AM com.mongodb.DBTCPConnector initDirectConnection
WARNING: Exception executing isMaster command on sever port
java.io.IOException: couldn't connect to [server port] bc:java.net.ConnectException: Connection refused: connect
    at com.mongodb.DBPort._open(DBPort.java:214)
    at com.mongodb.DBPort.go(DBPort.java:107)
    at com.mongodb.DBPort.go(DBPort.java:88)
    at com.mongodb.DBPort.findOne(DBPort.java:143)
    at com.mongodb.DBPort.runCommand(DBPort.java:148)
    at com.mongodb.DBTCPConnector.initDirectConnection(DBTCPConnector.java:548)
    at com.mongodb.DBTCPConnector.checkMaster(DBTCPConnector.java:527)
    at com.mongodb.DBTCPConnector.say(DBTCPConnector.java:174)
    at com.mongodb.DBTCPConnector.say(DBTCPConnector.java:155)
    at com.mongodb.DBApiLayer$MyCollection.insert(DBApiLayer.java:270)
    at com.mongodb.DBApiLayer$MyCollection.insert(DBApiLayer.java:226)
    at com.mongodb.DBCollection.insert(DBCollection.java:75)
    at com.mongodb.DBCollection.insert(DBCollection.java:59)
    at com.mongodb.DBCollection.insert(DBCollection.java:104)
    at com.filecompare.util.MongoDBConnection.main(MongoDBConnection.java:42)

Jan 18, 2016 12:23:04 AM com.mongodb.DBPortPool gotError
WARNING: emptying DBPortPool to server:port b/c of error
java.io.IOException: couldn't connect to [server:port] bc:java.net.ConnectException: Connection refused: connect
    at com.mongodb.DBPort._open(DBPort.java:214)
    at com.mongodb.DBPort.go(DBPort.java:107)
    at com.mongodb.DBPort.go(DBPort.java:84)
    at com.mongodb.DBPort.say(DBPort.java:79)
    at com.mongodb.DBTCPConnector.say(DBTCPConnector.java:181)
    at com.mongodb.DBTCPConnector.say(DBTCPConnector.java:155)
    at com.mongodb.DBApiLayer$MyCollection.insert(DBApiLayer.java:270)
    at com.mongodb.DBApiLayer$MyCollection.insert(DBApiLayer.java:226)
    at com.mongodb.DBCollection.insert(DBCollection.java:75)
    at com.mongodb.DBCollection.insert(DBCollection.java:59)
    at com.mongodb.DBCollection.insert(DBCollection.java:104)
    at com.filecompare.util.MongoDBConnection.main(MongoDBConnection.java:42)

Exception in thread "main" com.mongodb.MongoException$Network: can't say something
    at com.mongodb.DBTCPConnector.say(DBTCPConnector.java:194)
    at com.mongodb.DBTCPConnector.say(DBTCPConnector.java:155)
    at com.mongodb.DBApiLayer$MyCollection.insert(DBApiLayer.java:270)
    at com.mongodb.DBApiLayer$MyCollection.insert(DBApiLayer.java:226)
    at com.mongodb.DBCollection.insert(DBCollection.java:75)
    at com.mongodb.DBCollection.insert(DBCollection.java:59)
    at com.mongodb.DBCollection.insert(DBCollection.java:104)
    at com.filecompare.util.MongoDBConnection.main(MongoDBConnection.java:42)
Caused by: java.io.IOException: couldn't connect to [server port] bc:java.net.ConnectException: Connection refused: connect
    at com.mongodb.DBPort._open(DBPort.java:214)
    at com.mongodb.DBPort.go(DBPort.java:107)
    at com.mongodb.DBPort.go(DBPort.java:84)
    at com.mongodb.DBPort.say(DBPort.java:79)
    at com.mongodb.DBTCPConnector.say(DBTCPConnector.java:181)
    ... 7 more

Steps that I generally follow to connect with mongo on linux are,

  1. Login to server using Putty(windows) or ssh command(Mac).
  2. type in mongo.
  3. Connected to mongo, run mongo commands to view/ insert data.

But, in above java code I didn't include any login credentials. Do I have to do that. If so, could someone please guide me.

Are you sure you're providing the right values for your server and port property variables in mongodb.properties ?

Default port for MongoDB is 27017 .

Also, check your mongod.conf on the MongoDB server. This file is found, by default at /etc/mongod.conf and look for the following attribute:

bind_ip = 127.0.0.1

If this is set to 127.0.0.1 or localhost , then you won't be able to access your MongoDB server publicly from outside.

Now to fix this, change value of bind_ip to include your public ip address, so if your public address is 46.12.212.34 , bind_ip will look like:

bind_ip = 127.0.0.1, 46.12.212.34

Save and exit the file and restart your MongoDB database. Your Java application should now work.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM