我们正在尝试使用 Java 代码连接到 Mongo Atlas
URI“mongodb+srv::@serveraddress/dbname?retryWrites=true&w=1”但出现 MongoTimeoutException 异常。
这里奇怪的是异常跟踪服务器=[]列表为空。
导致此错误的可能原因是什么?
MongoDB 服务器和 Java 驱动程序详细信息:
MongoDB 服务器: 4.2
MongoDB java 驱动程序: 3.12.5
spring-data-mongodb:2.1.5.RELEASE
如果需要任何进一步的信息,请告诉我。
谢谢您的帮助。
com.mongodb.MongoTimeoutException: Timed out after 30000 ms while waiting to connect. Client view of cluster state is {type=UNKNOWN, servers=[]
at com.mongodb.internal.connection.BaseCluster.getDescription(BaseCluster.java:182)
at com.mongodb.internal.connection.AbstractMultiServerCluster.getDescription(AbstractMultiServerCluster.java:54)
at com.mongodb.client.internal.MongoClientDelegate.getConnectedClusterDescription(MongoClientDelegate.java:152)
at com.mongodb.client.internal.MongoClientDelegate.createClientSession(MongoClientDelegate.java:103)
at com.mongodb.Mongo.createClientSession(Mongo.java:832)
at com.mongodb.MongoClient.startSession(MongoClient.java:582)
at com.mongodb.MongoClient.startSession(MongoClient.java:569)
at com.shutterfly.services.project.InitMongoDBCollection.onApplicationEvent(InitMongoDBCollection.java:36)
at com.shutterfly.services.project.InitMongoDBCollection.onApplicationEvent(InitMongoDBCollection.java:20)
at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172)
at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:165)
at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139)
at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:402)
at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:359)
at org.springframework.boot.context.event.EventPublishingRunListener.running(EventPublishingRunListener.java:105)
at org.springframework.boot.SpringApplicationRunListeners.running(SpringApplicationRunListeners.java:78)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:332)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1260)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1248)
at com.shutterfly.services.project.Application.main(Application.java:18)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:53)
at java.lang.Thread.run(Thread.java:748)
添加答案,以便对其他人有所帮助,他们将来可能会遇到类似的问题。
我们已经解决了这个问题,问题是查找集群列表并以默认时间连接到该列表需要时间,我们可以使用“MongoClientOptionsFactoryBean”来自定义参数并可以覆盖默认配置。
@Bean
public MongoClientOptionsFactoryBean getMongoClientOptionsFactoryBean() {
MongoClientOptionsFactoryBean mongoClientOptionsFactoryBean = new MongoClientOptionsFactoryBean();
mongoClientOptionsFactoryBean.setConnectTimeout(timeout);
mongoClientOptionsFactoryBean.setConnectionsPerHost(connectionsPerHost);
mongoClientOptionsFactoryBean.setMaxWaitTime(maxWaitTime);
mongoClientOptionsFactoryBean.setServerSelectionTimeout(ServerSelectionTimeout);
mongoClientOptionsFactoryBean.setThreadsAllowedToBlockForConnectionMultiplier(connMultiplier);
return mongoClientOptionsFactoryBean;
}
在我的例子中 mongo 根本没有运行:)
请检查:
systemctl status mongod.service
并确保在重新启动服务器之前启用它:
systemctl enable mongod.service
所以我也有同样的问题 我通过这段代码修复它 使用这个导入
import com.mongodb.client.MongoClient;
这是代码
String web="mongodb://";
MongoClient mongoClient = MongoClients.create(web+ENVIRONMENT);
database = mongoClient.getDatabase("PUT_HERE_YOUR_DB_NAME");
也许在某些地方您需要更改web
String web="mongodb+srv://"
I am also facing the same issue and below is the complete code i am using in JMeter tool-
import com.mongodb.MongoClient;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import org.bson.Document;
import org.bson.types.ObjectId;
import static com.mongodb.client.model.Filters.*;
import static com.mongodb.client.model.Updates.*;
// MongoDB connection details
def serverAddress = new ServerAddress(vars.get("mongoHost"), vars.get("mongoPort").toInteger())
// MongoDB credential information
def username = vars.get("mongoUsername");
def databasename = vars.get("mongoDatabase");
def password = vars.get("mongoPassword").toCharArray()
def credentials = MongoCredential.createCredential(username, databasename, password)
// Create MongoClient
def mongoClient = new MongoClient(serverAddress, [credentials] as List)
// Connect to the database
def database = mongoClient.getDatabase(databasename)
// Access a collection
def collection = database.getCollection(vars.get("mongoCollection"))
// Document to find
Document result = collection.find(eq("email", vars.get("mail"))).first();
//Document result = collection.await collection.find({});
if (result != null)
{
// Document to update
//insertOne
collection.updateOne(eq("email", vars.get("randomEmail")),combine(set("isActive", true)));
return "User with email=" + vars.get("email") + " modified";
//return result;
}else
{
return "No Record Found";
}
// Close MongoDB connection
mongoClient.close()
**error message-**
Response code:500
Response message:javax.script.ScriptException: com.mongodb.MongoTimeoutException: Timed out after 30000 ms while waiting to connect. Client view of cluster state is {type=UNKNOWN, servers=[{address=mongo --host effie-sharedperf-docdb.cluster-cpmjeylhxh2g.us-east-1.docdb.amazonaws.com:27017, type=UNKNOWN, state=CONNECTING, exception={com.mongodb.MongoSocketException: mongo --host effie-sharedperf-docdb.cluster-cpmjeylhxh2g.us-east-1.docdb.amazonaws.com}, caused by {java.net.UnknownHostException: mongo --host effie-sharedperf-docdb.cluster-cpmjeylhxh2g.us-east-1.docdb.amazonaws.com}}]
SampleResult fields:
ContentType:
DataEncoding: null