異常描述:
項目使用阿里雲的mongo服務一段時間後出現:
原因
mongo沒有配置空閒連接時間,而spring boot 默認的空閒連接時間爲0。當連接閒置一段時間,由於防火牆或者負載均衡的原因,導致連接被關閉,而客戶端並不知道,當客戶端繼續使用這個關閉的連接進行讀寫時就會出錯。
解決
解決辦法就是設置連接閒置時間,當超過這個閒置時間客戶端主動關閉連接,下次使用時重新建立連接,這樣可以有效避免連接失效的問題。
1.如果使用mongo 2.x的配置時,增加設置:
spring.data.mongodb.prepare.maxConnectionIdleTime=60000
spring.data.mongodb.prepare.maxConnectionLifeTime=0
2.寫一個配置類設置空閒連接時間
@Configuration
public class MongoCongig {
@Bean
public MongoClientOptions mongoOptions() {
return MongoClientOptions.builder().maxConnectionIdleTime(3000).build();
}
3.如果使用mongo 3.x 配置:
spring.data.mongodb.uri=mongodb://username:[email protected]:3717/test?maxIdleTimeMS=3000
補充:
mongo 3.x 配置:
- uri: mongodb://[username:password@]host1[:port1][,hostN[:portN]]][/[database[.collection]][?options]]
- options屬性