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 正在其上运行。

有任何想法吗?谢谢!

4

5 回答 5

7

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

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

不过还是非常感谢大家!

于 2013-05-30T21:30:25.420 回答
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();
    }
于 2015-11-13T06:01:39.907 回答
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;
}
于 2015-11-13T06:17:14.353 回答
0

以下对我有用:

private static final String DB_NAME = "yourDbName";

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

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

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

于 2013-05-30T18:31:03.397 回答
0

如果推荐的答案不起作用;尝试在 /etc/mongod.conf 中的 mongod.conf 文件中设置 bindIp: 0.0.0.0

编辑:显然,迟到的帖子没有其他答案可以解决我的问题,而且单行答案是不够的。

于 2019-06-05T05:20:17.130 回答