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:27017
和10.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 boot中mongodb的使用
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 boot中MongoDB 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 Boot中MongoDB的使用
Spring Boot(十一):Spring Boot中MongoDB的使用 mongodb是最早熱門非關係資料庫的之一,使用也比較普遍,一般會用做離線資料分析來使用,放到內網的居多。由於很多公司使用了雲服務,伺服器預設都開放了外網地址,導致前一陣子大批 MongoDB 因配置漏洞被攻擊,資料被刪,引起了人
spring boot 之 mongodb多資料來源配置
一、為什麼要使用多資料來源 在一些業務複雜的系統中,業務資料儲存可能在不同的mongodb庫中,此時,可能需要同時讀取這兩個庫裡的資料,進行一些邏輯處理,此時需要讀取不同的庫,為了解決這個問題,採用多資料來源操作。 二、多資料來源配置 spring boot自動配置
在spring boot中log4j2程式設計式配置(Programmatic Configuration)步驟
下面根據自己的實踐稍微總結一下: 1、編寫 自定義ConfigurationFactory 繼承自org.apache.logging.log4j.core.config.Configuratio
Spring Boot 中使用 @Transactional 註解配置事務管理(轉載)
事務管理是應用系統開發中必不可少的一部分。Spring 為事務管理提供了豐富的功能支援。Spring 事務管理分為程式設計式和宣告式的兩種方式。程式設計式事務指的是通過編碼方式實現事務;宣告式事務基於 AOP,將具體業務邏輯與事務處理解耦。宣告式事務管理使業務程式碼邏輯不受汙
Spring boot中mongodb的使用
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一樣,提供了
spring中redis連線池版單節點使用(xml配置及非xml配置)
1.依賴 <!--引入reids--> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId