开发环境:win10
mongodb所在环境:Centos7
mongodb版本:mongodb-linux-x86_64-3.6.12
先看一下连接mongodb的部分代码:
public class MongodbUtil {
private static MongoClient MONGODB_CLIENT;
private static String MONGODB_IP;
private static Integer MONGODB_PORT;
private static String MONGODB_DATABASE_NAME;
private static String MONGODB_COLLECTION_NAME;
static {
MONGODB_IP = ConfigurationManager.getProperty("mongodb.host");
MONGODB_PORT = ConfigurationManager.getInteger("mongodb.port");
MONGODB_DATABASE_NAME = ConfigurationManager.getProperty("mongodb.dataSource.name");
MONGODB_COLLECTION_NAME = ConfigurationManager.getProperty("mongodb.collection.name");
log.info("准备获取mongo连接,host:{},port:{},source:{}", MONGODB_IP, MONGODB_PORT, MONGODB_DATABASE_NAME);
MONGODB_CLIENT = new MongoClient(MONGODB_IP, MONGODB_PORT);
}
public static void main(String[] args) {
MongoDatabase database = MONGODB_CLIENT.getDatabase(MONGODB_DATABASE_NAME);
log.info("db名字:{}", database.getName());
MongoCollection<Document> year_census = database.getCollection("year_census");
FindIterable<Document> documents = year_census.find();
for (Document document : documents) {
System.out.println(document);
}
}
}
运行报错:
19/05/22 08:23:57 INFO utils.MongodbUtil: 准备获取mongo连接,host:s201,port:27017,source:portrait
19/05/22 08:23:57 INFO driver.cluster: Cluster created with settings {hosts=[s201:27017], mode=SINGLE, requiredClusterType=UNKNOWN, serverSelectionTimeout='30000 ms', maxWaitQueueSize=500}
19/05/22 08:23:57 INFO utils.MongodbUtil: db名字:portrait
19/05/22 08:23:57 INFO driver.cluster: Cluster description not yet available. Waiting for 30000 ms before timing out
19/05/22 08:23:58 INFO driver.cluster: Exception in monitor thread while connecting to server s201:27017
com.mongodb.MongoSocketOpenException: Exception opening socket
at com.mongodb.connection.SocketStream.open(SocketStream.java:62)
at com.mongodb.connection.InternalStreamConnection.open(InternalStreamConnection.java:126)
at com.mongodb.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:114)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.net.ConnectException: Connection refused: connect
at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at com.mongodb.connection.SocketStreamHelper.initialize(SocketStreamHelper.java:59)
at com.mongodb.connection.SocketStream.open(SocketStream.java:57)
... 3 more
Exception in thread "main" com.mongodb.MongoTimeoutException: Timed out after 30000 ms while waiting to connect. Client view of cluster state is {type=UNKNOWN, servers=[{address=s201:27017, type=UNKNOWN, state=CONNECTING, exception={com.mongodb.MongoSocketOpenException: Exception opening socket}, caused by {java.net.ConnectException: Connection refused: connect}}]
at com.mongodb.connection.BaseCluster.getDescription(BaseCluster.java:167)
at com.mongodb.Mongo.getConnectedClusterDescription(Mongo.java:881)
at com.mongodb.Mongo.createClientSession(Mongo.java:873)
at com.mongodb.Mongo$3.getClientSession(Mongo.java:862)
at com.mongodb.Mongo$3.execute(Mongo.java:819)
at com.mongodb.MongoIterableImpl.execute(MongoIterableImpl.java:130)
at com.mongodb.MongoIterableImpl.iterator(MongoIterableImpl.java:77)
at com.hrong.utils.MongodbUtil.main(MongodbUtil.java:68)
解决办法:
1、关闭防火墙:
systemctl stop firewalld.service
systemctl disable firewalld.service
2、因为这个版本的mongodb没有在etc下找到对应的配置文件,所以启动命令改成:
mongod -dbpath=/usr/local/mongodb/data --bind_ip 0.0.0.0
指定所有用户都可以连接
之前的命令为:mongod -dbpath=/usr/local/mongodb/data
启动出现警告: