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

问题描述 投票:5回答: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正在运行它。

有任何想法吗? 谢谢!

java mongodb networking mongodb-java
5个回答
7
投票

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

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

非常感谢大家!


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 = "[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();
    }

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

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连接。


0
投票

如果推荐的答案没有用; 尝试在位于/etc/mongod.conf的mongod.conf文件中设置bindIp:0.0.0.0

© www.soinside.com 2019 - 2024. All rights reserved.