Hướng dẫn spring boot mongodb connection timeout properties - Thuộc tính hết thời gian chờ kết nối khởi động mùa xuân mongodb

Tôi đang sử dụng ứng dụng Web Spring Boot kết nối với Mongo DB đang hoạt động ngoài hộp. Tôi chỉ sử dụng các thuộc tính sau:

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

Thời gian chờ mặc định cho MongoDB là 10 giây. Tôi muốn định cấu hình thời gian chờ. Tôi đã thử làm

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
1 hoặc
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
2

Không có tài sản nào hoạt động. Đó có phải là thứ mà tôi có thể chỉ định trong các thuộc tính và khung lò xo sẽ ​​chăm sóc nó hoặc ai đó có thể đưa ra ví dụ về việc làm điều đó bằng cách tuyên bố hạt đậu.

Hỏi ngày 22 tháng 4 năm 2016 lúc 2:59Apr 22, 2016 at 2:59

Hướng dẫn spring boot mongodb connection timeout properties - Thuộc tính hết thời gian chờ kết nối khởi động mùa xuân mongodb

Để làm theo chủ đề của bạn, đây sẽ là điều tốt nhất để trả lời câu hỏi của bạn. Có vẻ như bạn muốn đặt thời gian chờ trong tệp application.properies của mình.

Để làm như vậy:

Thay vì

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

Thử cái này

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

Sửa đổi thời gian tính bằng mili giây theo thời gian mong muốn.

Hướng dẫn spring boot mongodb connection timeout properties - Thuộc tính hết thời gian chờ kết nối khởi động mùa xuân mongodb

Đã trả lời ngày 30 tháng 1 năm 2018 lúc 23:31Jan 30, 2018 at 23:31

JaycjaycJayC

2.0446 Huy hiệu vàng39 Huy hiệu bạc70 Huy hiệu Đồng6 gold badges39 silver badges70 bronze badges

8

Điều này sẽ ghi đè lên máy tự động khởi động Spring:

@Configuration
public class MongoDbSettings {

    @Bean
    public MongoClientOptions mongoOptions() {
        return MongoClientOptions.builder().socketTimeout(2000).build();
    }

}

Đã trả lời ngày 4 tháng 10 năm 2016 lúc 11:33Oct 4, 2016 at 11:33

Berthier Lemieuxberthier LemieuxBerthier Lemieux

3,4651 Huy hiệu vàng24 Huy hiệu bạc24 Huy hiệu đồng1 gold badge24 silver badges24 bronze badges

1

Đối với dữ liệu lò xo với MongoDB phản ứng:

Trường hợp của tôi là một chút khác biệt (tôi đã kết nối kết nối - ném "gây ra bởi: java.lang.illegalstateexception: trạng thái nên là: mở")

Nhưng bạn có thể sử dụng điều này với trường hợp của bạn.

application.yml:

spring.data.mongodb:
  host: localhost
  database: myDb
  port: 27017
  username: admin
  password: test

Nếu việc triển khai của bạn sử dụng Mongoreactiveautoconfiguration để tạo Bean, thì bạn có thể định cấu hình nó với hạt đậu này:MongoReactiveAutoConfiguration for bean creation, then You can configure it with this 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;
}

Đã trả lời ngày 16 tháng 9 năm 2020 lúc 17:15Sep 16, 2020 at 17:15

Bộ lạc John TribejohnJohn Tribe

1.20212 huy hiệu bạc25 Huy hiệu đồng12 silver badges25 bronze badges

1

Mongoclientoptions là một lớp có các thuộc tính cần thiết.

Về mặt lập trình nếu bạn đã cấu hình MongoDB của mình theo chương trình, thì bên dưới là đoạn mã để giúp bạn ra ngoài. If you have configured your MongoDB programmatically, then below is the code snippet to help you out.

DB mongoDb;

MongoClient mongoClient = new MongoClient(new ServerAddress(url, port), 
                            MongoClientOptions.builder()
                            .socketTimeout(3000)
                            .minHeartbeatFrequency(25)
                            .heartbeatSocketTimeout(3000)
                            .build());
mongoDb = mongoClient.getDB(dbname);

Cấu hình XML - Nâng cao



  
    
  


Cũng tham khảo ở đây để biết tài liệu đầy đủ.

Đã trả lời ngày 22 tháng 4 năm 2016 lúc 4:31Apr 22, 2016 at 4:31

Hướng dẫn spring boot mongodb connection timeout properties - Thuộc tính hết thời gian chờ kết nối khởi động mùa xuân mongodb

Ankur Singhalankur SinghalAnkur Singhal

25.4K13 Huy hiệu vàng80 Huy hiệu bạc114 Huy hiệu đồng13 gold badges80 silver badges114 bronze badges

Câu hỏi đã cũ nhưng đối với tất cả những người có vấn đề với thời gian chờ trình điều khiển Mongo DB Java: Đặt thuộc tính MaxConnectionIdletIme.

Ví dụ Spring Boot:

import com.mongodb.MongoClient;
import com.mongodb.MongoClientOptions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.mongo.MongoProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;

import javax.annotation.PreDestroy;
import java.net.UnknownHostException;

@Configuration
@ConditionalOnClass(MongoClient.class)
@EnableConfigurationProperties(MongoProperties.class)
@ConditionalOnMissingBean(type = "org.springframework.data.mongodb.MongoDbFactory")
public class MongoAutoConfiguration {
    @Autowired
    private MongoProperties properties;

    @Autowired(required = false)
    private MongoClientOptions options;

    @Autowired
    private Environment environment;

    private MongoClient mongo;

    @PreDestroy
    public void close() {
        if (this.mongo != null) {
            this.mongo.close();
        }
    }

    @Bean
    @ConditionalOnMissingBean
    public MongoClient mongo() throws UnknownHostException {
        this.options = options.builder().maxConnectionIdleTime(1000 * 60 * 4).build();
        this.mongo = this.properties.createMongoClient(this.options, this.environment);
        return this.mongo;
    }
}

Một liên kết rất hữu ích ở đây: trình điều khiển JavaJava-2535 com.mongodb.mongoSocketWriteException ......

Đã trả lời ngày 3 tháng 7 năm 2017 lúc 9:43Jul 3, 2017 at 9:43

T.RexT.RexT.Rex

711 Huy hiệu bạc9 Huy hiệu đồng1 silver badge9 bronze badges

2

Câu hỏi dành riêng cho Spring Boot. Tôi đang sử dụng phương pháp sau đây hoạt động tốt, xin vui lòng đề xuất nếu có cách không sử dụng mới và sử dụng lò xo để định cấu hình nó.

 import java.util.ArrayList;
 import java.util.List;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.data.mongodb.config.AbstractMongoConfiguration;
 import org.springframework.data.mongodb.core.mapping.MongoMappingContext;
 import org.springframework.data.mongodb.repository.config.EnableMongoRepositories;
 import com.mongodb.Mongo;
 import com.mongodb.MongoClient;
 import com.mongodb.MongoClientOptions;
 import com.mongodb.MongoCredential;
 import com.mongodb.ServerAddress;

 @Configuration
 @EnableMongoRepositories("com.myapp.repository")
 public class SpringMongoConfig extends AbstractMongoConfiguration {

@Value("${myapp.mongodb.host}")
private String host;

@Value("${myapp.mongodb.port}")
private int port;

@Value("${myapp.mongodb.database}")
private String mongoDB;

@Value("${myapp.mongodb.userName}")
private String userName;

@Value("${myapp.mongodb.password}")
private String password;

@Value("${myapp.mongodb.socketTimeoutMS}")
private int socketTimeout;

@Value("${myapp.mongodb.connectionTimeoutMS}")
private int connectionTimeout;

@Override
public MongoMappingContext mongoMappingContext() throws ClassNotFoundException {
return super.mongoMappingContext();
}

@Override
@Bean
public Mongo mongo() throws Exception {

List servers = new ArrayList();
servers.add(new ServerAddress(host, port));

List creds = new ArrayList();
creds.add(MongoCredential.createCredential(userName, mongoDB, password.toCharArray()));

MongoClientOptions builder = MongoClientOptions.builder().socketTimeout(socketTimeout).connectTimeout(connectionTimeout).build();

return new MongoClient(servers, creds, builder);
}

@Override
protected String getDatabaseName() {
return mongoDB;
}
}

answered Apr 22, 2016 at 17:54Apr 22, 2016 at 17:54

Noor SyedNoor SyedNoor Syed

6203 gold badges7 silver badges16 bronze badges3 gold badges7 silver badges16 bronze badges

0

I found the following document with a possible solution.

https://www.programmersought.com/article/1927319190/

It mentions the following:

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
0

I'm trying to test this now to make sure it is working, but it at least seems plausible.

answered Oct 15, 2020 at 15:59Oct 15, 2020 at 15:59

gaoagonggaoagonggaoagong

1,11914 silver badges15 bronze badges14 silver badges15 bronze badges

1