咱們在配置mongodb的時候配置一個url鏈接就開始開發了,如spring
spring: data: mongodb: uri: mongodb://xxx.xxx.xxx.xxx:27017/test
可是這樣很是容易斷開,不適合生產環境使用。如今咱們要給mongodb添加鏈接池配置(此處未設密碼,須要加密碼的請自行加入username,password設置),另外此處爲單機設置,未添加集羣。mongodb
刪除在資源文件中的設置,添加如下配置類socket
@Component @Data public class MongoSettingsProperties { @NotBlank private String database = "test"; @NotEmpty private List<String> address = Arrays.asList("xxx.xxx.xxx.xxx:27017"); private Integer minConnectionsPerHost = 0; private Integer maxConnectionsPerHost = 100; private Integer threadsAllowedToBlockForConnectionMultiplier = 5; private Integer serverSelectionTimeout = 30000; private Integer maxWaitTime = 120000; private Integer maxConnectionIdleTime = 0; private Integer maxConnectionLifeTime = 0; private Integer connectTimeout = 10000; private Integer socketTimeout = 0; private Boolean socketKeepAlive = false; private Boolean sslEnabled = false; private Boolean sslInvalidHostNameAllowed = false; private Boolean alwaysUseMBeans = false; private Integer heartbeatFrequency = 10000; private Integer minHeartbeatFrequency = 500; private Integer heartbeatConnectTimeout = 20000; private Integer heartbeatSocketTimeout = 20000; private Integer localThreshold = 15; }
@Configuration @Slf4j public class MongoConfig { //覆蓋默認的MongoDbFacotry @Bean @Autowired public MongoDbFactory mongoDbFactory(MongoSettingsProperties properties) { //客戶端配置(鏈接數,副本集羣驗證) MongoClientOptions.Builder builder = new MongoClientOptions.Builder(); builder.connectionsPerHost(properties.getMaxConnectionsPerHost()); builder.minConnectionsPerHost(properties.getMinConnectionsPerHost()); // if (properties.getReplicaSet() != null) { // builder.requiredReplicaSetName(properties.getReplicaSet()); // } builder.threadsAllowedToBlockForConnectionMultiplier( properties.getThreadsAllowedToBlockForConnectionMultiplier()); builder.serverSelectionTimeout(properties.getServerSelectionTimeout()); builder.maxWaitTime(properties.getMaxWaitTime()); builder.maxConnectionIdleTime(properties.getMaxConnectionIdleTime()); builder.maxConnectionLifeTime(properties.getMaxConnectionLifeTime()); builder.connectTimeout(properties.getConnectTimeout()); builder.socketTimeout(properties.getSocketTimeout()); // builder.socketKeepAlive(properties.getSocketKeepAlive()); builder.sslEnabled(properties.getSslEnabled()); builder.sslInvalidHostNameAllowed(properties.getSslInvalidHostNameAllowed()); builder.alwaysUseMBeans(properties.getAlwaysUseMBeans()); builder.heartbeatFrequency(properties.getHeartbeatFrequency()); builder.minHeartbeatFrequency(properties.getMinHeartbeatFrequency()); builder.heartbeatConnectTimeout(properties.getHeartbeatConnectTimeout()); builder.heartbeatSocketTimeout(properties.getHeartbeatSocketTimeout()); builder.localThreshold(properties.getLocalThreshold()); MongoClientOptions mongoClientOptions = builder.build(); // MongoDB地址列表 List<ServerAddress> serverAddresses = new ArrayList<>(); for (String address : properties.getAddress()) { String[] hostAndPort = address.split(":"); String host = hostAndPort[0]; Integer port = Integer.parseInt(hostAndPort[1]); ServerAddress serverAddress = new ServerAddress(host, port); serverAddresses.add(serverAddress); } //System.out.println("serverAddresses:" + serverAddresses.toString()); // 鏈接認證 // MongoCredential mongoCredential = MongoCredential.createScramSha1Credential(properties.getUsername(), // properties.getAuthenticationDatabase() != null ? properties.getAuthenticationDatabase() : properties.getDatabase(), // properties.getPassword().toCharArray()); // //建立客戶端和Factory MongoClient mongoClient = new MongoClient(serverAddresses, mongoClientOptions); MongoDbFactory mongoDbFactory = new SimpleMongoDbFactory(mongoClient, properties.getDatabase()); log.info("mongodb注入成功"); return mongoDbFactory; } }