Noo*_*yed 7 spring mongodb spring-boot
我正在使用连接到mongo db的spring boot web应用程序,它正在开箱即用.我只使用以下属性:
spring.data.mongodb.host=myHost
spring.data.mongodb.port=27017
spring.data.mongodb.database=myDatabase
spring.data.mongo.repositories.enabled=true
spring.data.mongodb.username=myUser
spring.data.mongodb.password=myPassword
Run Code Online (Sandbox Code Playgroud)
MongoDB的默认超时是10秒.我想配置超时.我试过做
spring.data.mongodb.socketTimeout=2或 spring.data.mongodb.connectionTimeout=2
这些属性都不起作用.这是我可以在属性中指定的东西,Spring框架会处理它,或者有人可以举例说明通过声明Bean来实现它.
Ber*_*eux 12
这将覆盖Spring Boot自动配置:
@Configuration
public class MongoDbSettings {
@Bean
public MongoClientOptions mongoOptions() {
return MongoClientOptions.builder().socketTimeout(2000).build();
}
}
Run Code Online (Sandbox Code Playgroud)
要按照您的主题,这将是最好的回答您的问题.看起来您想在application.properties文件中设置超时.
为此:
代替
spring.data.mongodb.host=myHost
spring.data.mongodb.port=27017
spring.data.mongodb.database=myDatabase
spring.data.mongodb.username=myUser
spring.data.mongodb.password=myPassword
Run Code Online (Sandbox Code Playgroud)
试试这个
spring.data.mongodb.uri=mongodb://myUser:myPassword@myHost:27017,myHost:27017/myDatabase?serverSelectionTimeoutMS=2000&connectTimeoutMS=2000
spring.data.mongodb.database=myDatabase
spring.data.mongo.repositories.enabled=true
Run Code Online (Sandbox Code Playgroud)
将时间(以毫秒为单位)修改为所需时间.
MongoClientOptions是一个具有所需属性的类。
以编程方式 如果您以编程方式配置了 MongoDB,那么下面的代码片段可以帮助您。
DB mongoDb;
MongoClient mongoClient = new MongoClient(new ServerAddress(url, port),
MongoClientOptions.builder()
.socketTimeout(3000)
.minHeartbeatFrequency(25)
.heartbeatSocketTimeout(3000)
.build());
mongoDb = mongoClient.getDB(dbname);
Run Code Online (Sandbox Code Playgroud)
XML 配置 - 高级
<beans>
<mongo:mongo host="localhost" port="27017">
<mongo:options connections-per-host="8"
threads-allowed-to-block-for-connection-multiplier="4"
connect-timeout="1000"
max-wait-time="1500}"
auto-connect-retry="true"
socket-keep-alive="true"
socket-timeout="1500"
slave-ok="true"
write-number="1"
write-timeout="0"
write-fsync="true"/>
</mongo:mongo/>
</beans>
Run Code Online (Sandbox Code Playgroud)
另请参阅此处以获取完整文档。
对于带有 Reactive MongoDb 的 Spring Data:
我的情况有点不同(我关闭了连接 - 抛出“Caused by: java.lang.IllegalStateException: state should be: open”)
但是你可以在你的情况下使用它。
应用程序.yml:
spring.data.mongodb:
host: localhost
database: myDb
port: 27017
username: admin
password: test
Run Code Online (Sandbox Code Playgroud)
如果您的实现使用MongoReactiveAutoConfiguration来创建 bean,那么您可以使用此 bean 对其进行配置:
@Bean
public MongoClientSettings mongoClientSettings() {
final MongoClientSettings clientSettings = MongoClientSettings.builder()
.retryWrites(true)
.applyToConnectionPoolSettings((ConnectionPoolSettings.Builder builder) -> {
builder.maxSize(300) //connections count
.minSize(100)
.maxConnectionLifeTime(0, TimeUnit.MILLISECONDS)
.maxConnectionIdleTime(0, TimeUnit.MILLISECONDS)
.maxWaitTime(5000, TimeUnit.MILLISECONDS)
.maxWaitQueueSize(5000);
})
.applyToSocketSettings(builder -> {
builder.connectTimeout(2000, TimeUnit.MILLISECONDS);
})
.applicationName("app")
.build();
return clientSettings;
}
Run Code Online (Sandbox Code Playgroud)