我有一点问题,我在MongoDB Atlas上创建了一个帐户(云解决方案,我为免费帐户“测试”),我的Spring Boot应用程序使用Atlas中的数据库。( MongoDB Database structure )
一切都很好,我启动应用程序并且它可以工作,但是如果我在5分钟内停止从我的弹簧应用程序发送请求,当我发送一个请求时,我得到一个例外:
Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception
[Request processing failed; nested exception is org.springframework.data.mongodb.UncategorizedMongoDbException:
Prematurely reached end of stream; nested exception is com.mongodb.MongoSocketReadException: Prematurely reached end of stream] with root cause
com.mongodb.MongoSocketReadException: Prematurely reached end of stream
我也得到了这个例外:
com.mongodb.MongoSocketException: rscuisine-shard-00-02-xgxgc.mongodb.net
com.mongodb.MongoSocketException: rscuisine-shard-00-01-xgxgc.mongodb.net
com.mongodb.MongoSocketException: rscuisine-shard-00-00-xgxgc.mongodb.net
在此异常之后,如果我再次发送请求,它会起作用。这就像超时问题......
我将数据库与此类(以及application.properties文件)连接:
@Configuration
@PropertySource("classpath:application.properties")
public class MongoConfig extends AbstractMongoConfiguration {
@Value("${spring.data.mongodb.database}")
private String DB;
@Value("${spring.data.mongodb.uri}")
private String URI;
protected String getURI() {
return URI;
}
@Override
public Mongo mongo() throws Exception {
return new MongoClient(new MongoClientURI(URI));
}
@Override
protected String getMappingBasePackage() {
return "xx.xxxxxxxx.xxxxxxxxx.xxxxxxxxxxx";
}
@Override
protected String getDatabaseName() {
return DB;
}
}
application.properties文件中的URI如下所示:
mongodb://XXXX:XXXX@rscuisine-shard-00-00-xgxgc.mongodb.net:27017,rscuisine-shard-00-01-xgxgc.mongodb.net:27017,rscuisine-shard-00-02-xgxgc.mongodb.net:27017/XXXX?ssl=true&replicaSet=RSCuisine-shard-0&authSource=admin
我检查了MongoClientURI类,并且有超时内容的参数,但没有任何作用......你有什么想法吗?
非常感谢。
答案 0 :(得分:0)
我在Atlas上注意到了同样的事情,但是对我来说,在连接字符串确实上设置超时选项maxIdleTimeMS
似乎可以解决问题。
mongodb+srv://USER:PASS@xxx.yyy.mongodb.net/?retryWrites=true&w=majority&maxIdleTimeMS=300000