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 構成ファイルには、ローカル IP に設定された bind_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 public class MongoConfiguration extends 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");

データベース名はドライバーによって使用されます。接続文字列 (172.234.52.24:27017) は、データ (MongoVue または MongoExplorer) を表示するときにクライアントによって使用されます。また、ポート 27017 に固執します。

編集: MongoDriver for Java を使用して接続しています。

于 2013-05-30T18:31:03.397 に答える