1. 程式人生 > >Spring Boot中使用MongoDB的連線池配置

Spring Boot中使用MongoDB的連線池配置

說明

Spring Boot中通過依賴spring-boot-starter-data-mongodb,來實現spring-data-mongodb的自動配置。
但是預設情況下,Spring Boot 中,並沒有像使用MySQL或者Redis一樣,提供了連線池配置的功能。因此,我們需要自行重寫 MongoDbFactory,實現MongoDB客戶端連線的引數配置擴充套件。

需要說明的是,MongoDB的客戶端本身就是一個連線池,因此,我們只需要配置客戶端即可。

配置檔案

為了統一Spring Boot的配置,我們要將重寫的配置也配置到 application.yml中,字首為spring.data.mongodb.custom

下(字首可自己隨意配置):

spring:
  data:
    mongodb:
      custom:
        hosts:
          - 10.0.5.1
          - 10.0.5.1
        ports:
          - 27017
          - 27018
        replica-set: mgset-3590061
        username: jancee
        password: abc123
        database: jancee
        authentication-database
: admin connections-per-host: 20 min-connections-per-host: 20

該配置例子中,配置了副本集,其中包含了主機10.0.5.1:2701710.0.5.1:27018,其它配置與Spring Boot的標準配置類似,另外,connections-per-host為客戶端的連線數,in-connections-per-host為客戶端最小連線數。

將配置包裝成類

為方便呼叫和可讀性,將上述配置包裝成一個配置實體類,MongoConfig.java程式碼如下:

package com.feidiao.jancee.fdiot.api.config.mongo;


import
org.hibernate.validator.constraints.NotBlank; import org.hibernate.validator.constraints.NotEmpty; import org.springframework.stereotype.Component; import org.springframework.validation.annotation.Validated; import java.util.List; @Component @Validated public class MongoSettingsProperties { @NotBlank private String database; @NotEmpty private List<String> hosts; @NotEmpty private List<Integer> ports; private String replicaSet; private String username; private String password; private String authenticationDatabase; private Integer minConnectionsPerHost = 10; private Integer connectionsPerHost = 2; public MongoSettingsProperties() { } public String getDatabase() { return database; } public void setDatabase(String database) { this.database = database; } public List<String> getHosts() { return hosts; } public void setHosts(List<String> hosts) { this.hosts = hosts; } public List<Integer> getPorts() { return ports; } public void setPorts(List<Integer> ports) { this.ports = ports; } public String getReplicaSet() { return replicaSet; } public void setReplicaSet(String replicaSet) { this.replicaSet = replicaSet; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getAuthenticationDatabase() { return authenticationDatabase; } public void setAuthenticationDatabase(String authenticationDatabase) { this.authenticationDatabase = authenticationDatabase; } public Integer getMinConnectionsPerHost() { return minConnectionsPerHost; } public void setMinConnectionsPerHost(Integer minConnectionsPerHost) { this.minConnectionsPerHost = minConnectionsPerHost; } public Integer getConnectionsPerHost() { return connectionsPerHost; } public void setConnectionsPerHost(Integer connectionsPerHost) { this.connectionsPerHost = connectionsPerHost; } }

覆蓋MongoDbFactory

接下來,就是覆蓋Spring Boot原有的MongoDbFactory Bean,新建檔案MongoConfig.java,程式碼如下:

import com.mongodb.MongoClient;
import com.mongodb.MongoClientOptions;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.MongoDbFactory;
import org.springframework.data.mongodb.core.SimpleMongoDbFactory;


import java.util.ArrayList;
import java.util.List;


@Configuration
public class MongoConfig {




    // 注入配置實體
    @Autowired
    private MongoSettingsProperties mongoSettingsProperties;
    @Bean
    @ConfigurationProperties(
            prefix = "spring.data.mongodb.custom")
    MongoSettingsProperties mongoSettingsProperties() {
        return new MongoSettingsProperties();
    }


    // 覆蓋預設的MongoDbFactory
    @Bean
    MongoDbFactory mongoDbFactory() {
        //客戶端配置(連線數、副本叢集驗證)
        MongoClientOptions.Builder builder = new MongoClientOptions.Builder();
        builder.connectionsPerHost(mongoSettingsProperties.getConnectionsPerHost());
        builder.minConnectionsPerHost(mongoSettingsProperties.getMinConnectionsPerHost());
        if (mongoSettingsProperties.getReplicaSet() != null) {
            builder.requiredReplicaSetName(mongoSettingsProperties.getReplicaSet());
        }
        MongoClientOptions mongoClientOptions = builder.build();


        // MongoDB地址列表
        List<ServerAddress> serverAddresses = new ArrayList<>();
        for (String host : mongoSettingsProperties.getHosts()) {
            Integer index = mongoSettingsProperties.getHosts().indexOf(host);
            Integer port = mongoSettingsProperties.getPorts().get(index);


            ServerAddress serverAddress = new ServerAddress(host, port);
            serverAddresses.add(serverAddress);
        }
        System.out.println("serverAddresses:" + serverAddresses.toString());


        // 連線認證
        List<MongoCredential> mongoCredentialList = new ArrayList<>();
        if (mongoSettingsProperties.getUsername() != null) {
            mongoCredentialList.add(MongoCredential.createScramSha1Credential(
                    mongoSettingsProperties.getUsername(),
                    mongoSettingsProperties.getAuthenticationDatabase() != null ? mongoSettingsProperties.getAuthenticationDatabase() : mongoSettingsProperties.getDatabase(),
                    mongoSettingsProperties.getPassword().toCharArray()));
        }
        System.out.println("mongoCredentialList:" + mongoCredentialList.toString());


        //建立客戶端和Factory
        MongoClient mongoClient = new MongoClient(serverAddresses, mongoCredentialList, mongoClientOptions);
        MongoDbFactory mongoDbFactory = new SimpleMongoDbFactory(mongoClient, mongoSettingsProperties.getDatabase());


        return mongoDbFactory;
    }
}

在這裡,實現了MongoDB連線時,前面配置的引數的設定,按照自己的實際情況,可以在new SimpleMongoDbFactory時,增加修改自己需要的配置引數。

至此,就完成了全部配置,執行測試即可。

本文來源
本文來自 《王靜茜 物聯網》部落格,我的更多最新文章,點選進入

相關推薦

Spring boot+Mybatis+druid連線及監控資訊配置

新建專案我是用的是IDEA,專案選擇如下所示:為專案取一個名字,如下圖所示,然後點選next選擇需要新增的模組,選擇完畢後,會自動將所需的依賴,新增到pom檔案中確認路徑無誤,點選finish即可專案基本結構,IDEA會自動生成,為了測試環境是否可以成功執行,建議建包結構如下

Spring Boot下Druid連線的使用配置分析

引言: 在Spring Boot下預設提供了若干種可用的連線池,Druid來自於阿里系的一個開源連線池,在連線池之外,還提供了非常優秀的監控功能,這裡講解如何與Spring Boot實現整合。 1.  環境描述      Spring Boot 1.4.0.RELEASE

springboot(十一):Spring bootmongodb的使用

gpo for 當前 window 公司 多表 erlang 大量 secondary mongodb是最早熱門非關系數據庫的之一,使用也比較普遍,一般會用做離線數據分析來使用,放到內網的居多。由於很多公司使用了雲服務,服務器默認都開放了外網地址,導致前一陣子大批 Mong

Spring Boot使用MyBatis註解配置詳解(1)

sql type .org 實體 sch 整合 PE 匯總 同傳 之前在Spring Boot中整合MyBatis時,采用了註解的配置方式,相信很多人還是比較喜歡這種優雅的方式的,也收到不少讀者朋友的反饋和問題,主要集中於針對各種場景下註解如何使用,下面就對幾種常見的情況舉

Spring Boot 使用 @Transactional 註解配置事務管理

all arc obj 資料 ror 科學 部分 直接 true 事務管理是應用系統開發中必不可少的一部分。Spring 為事務管理提供了豐富的功能支持。Spring 事務管理分為編程式和聲明式的兩種方式。編程式事務指的是通過編碼方式實現事務;聲明式事務基於 AOP,將具體

Spring boot 整合druid連線

前言 Druid是一個關係型資料庫連線池,是阿里巴巴的一個開源專案 地址:https://github.com/alibaba/druid Druid不但提供連線池的功能,還提供監控功能,可以實時檢視資料庫連線池和SQL查詢的工作情況。 配置Druid依賴 <!--web

Spring Boot使用MyBatis註解配置開發詳解

Spring Boot中使用MyBatis註解配置詳解 原創   2018-04-03 宗野       Spring Boot 最近專案原因可能會繼續開始使用

Spring Boot使用MyBatis註解配置詳解

   轉自翟永超 之前在Spring Boot中整合MyBatis時,採用了註解的配置方式,相信很多人還是比較喜歡這種優雅的方式的,也收到不少讀者朋友的反饋和問題,主要集中於針對各種場景下註解如何使用,下面就對幾種常見的情況舉例說明用法。 在做下面的示例之前,先準備一

Spring框架獲取連線的方式

1、連線池概述  資料庫連線是一種關鍵的有限的昂貴的資源,這一點在多使用者的網頁應用程式中體現得尤為突出。對資料庫連線的管理能顯著影響到整個應用程式的伸縮性和健壯性,影響到程式的效能指標。資料庫連線池正是針對這個問題提出來的。      資料庫連線池負責分配、管理和釋放資料庫

記一次spring bootMongoDB Prematurely reached end of stream的異常解決

  在spring boot專案中使用了mongodb,當一段時間沒有操作mongodb,下次操作mongodb時就會出現異常。異常如下: org.springframework.data.mongodb.UncategorizedMongoDbException: Prematurely reached

spring boot logback多環境配置

spring boot 配置logback spring boot自帶了log列印功能,使用的是Commons logging 具體可以參考spring boot log 因此,我們只需要在reso

Spring Boot(十一):Spring BootMongoDB的使用

Spring Boot(十一):Spring Boot中MongoDB的使用 mongodb是最早熱門非關係資料庫的之一,使用也比較普遍,一般會用做離線資料分析來使用,放到內網的居多。由於很多公司使用了雲服務,伺服器預設都開放了外網地址,導致前一陣子大批 MongoDB 因配置漏洞被攻擊,資料被刪,引起了人

spring bootmongodb多資料來源配置

一、為什麼要使用多資料來源 在一些業務複雜的系統中,業務資料儲存可能在不同的mongodb庫中,此時,可能需要同時讀取這兩個庫裡的資料,進行一些邏輯處理,此時需要讀取不同的庫,為了解決這個問題,採用多資料來源操作。 二、多資料來源配置 spring boot自動配置

spring bootlog4j2程式設計式配置(Programmatic Configuration)步驟

下面根據自己的實踐稍微總結一下: 1、編寫 自定義ConfigurationFactory 繼承自org.apache.logging.log4j.core.config.Configuratio

Spring Boot 使用 @Transactional 註解配置事務管理(轉載)

事務管理是應用系統開發中必不可少的一部分。Spring 為事務管理提供了豐富的功能支援。Spring 事務管理分為程式設計式和宣告式的兩種方式。程式設計式事務指的是通過編碼方式實現事務;宣告式事務基於 AOP,將具體業務邏輯與事務處理解耦。宣告式事務管理使業務程式碼邏輯不受汙

Spring bootmongodb的使用

MongoDB是一個介於關係資料庫和非關係資料庫之間的產品,是非關係資料庫當中功能最豐富,最像關係資料庫的。他支援的資料結構非常鬆散,是類似json的bjson格式,因此可以儲存比較複雜的資料型別。Mongo最大的特點是他支援的查詢語言非常強大,其語法有點類似於面向物件的查

Spring Boot2 系列教程(十一)Spring Boot 的靜態資源配置

當我們使用 SpringMVC 框架時,靜態資源會被攔截,需要新增額外配置,之前老有小夥伴在微信上問鬆哥 Spring Boot 中的靜態資源載入問題:“鬆哥,我的 HTML 頁面好像沒有樣式?”,今天我就通過一篇文章,來和大夥仔細聊一聊這個問題。 1. SSM 中的配置 要講 Spring Boot 中的問

Spring Boot2 系列教程(十八)Spring Boot 自定義 SpringMVC 配置

用過 Spring Boot 的小夥伴都知道,我們只需要在專案中引入 spring-boot-starter-web 依賴,SpringMVC 的一整套東西就會自動給我們配置好,但是,真實的專案環境比較複雜,系統自帶的配置不一定滿足我們的需求,往往我們還需要結合實際情況自定義配置。 自定義配置就有講究了,由於

Spring Boot使用MongoDB連線配置

說明 Spring Boot中通過依賴spring-boot-starter-data-mongodb,來實現spring-data-mongodb的自動配置。 但是預設情況下,Spring Boot 中,並沒有像使用MySQL或者Redis一樣,提供了

springredis連線版單節點使用(xml配置及非xml配置

1.依賴 <!--引入reids--> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId