Spring和MongoDB Atlas在不活动5分钟后中断连接

时间:2017-06-09 20:58:17

标签: java spring mongodb mongodb-query database

我有一点问题,我在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类,并且有超时内容的参数,但没有任何作用......你有什么想法吗?

非常感谢。

1 个答案:

答案 0 :(得分:0)

我在Atlas上注意到了同样的事情,但是对我来说,在连接字符串确实上设置超时选项maxIdleTimeMS似乎可以解决问题。

mongodb+srv://USER:PASS@xxx.yyy.mongodb.net/?retryWrites=true&w=majority&maxIdleTimeMS=300000