我正在尝试连接到远程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 :(得分:7)
我明白了......你们都有很好的建议,但问题更为根本。
在远程服务器上的mongo配置文件中,有一个bind_ip变量设置为本地ip。一旦我评论了这一点,一切正常。
非常感谢大家!
答案 1 :(得分: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();
}
答案 2 :(得分: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;
}
答案 3 :(得分: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连接。
答案 4 :(得分:0)
万一建议的答案不起作用;尝试在/etc/mongod.conf
中的mongod.conf文件中设置bindIp:0.0.0.0