最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

springboot配置mongodb連接池的方法步驟

 更新時間:2021年01月26日 10:19:54   作者:初窺門徑  
這篇文章主要介紹了springboot配置mongodb連接池的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

application.yml 配置

mongodb:
 address: localhost:27017
 database: soms
 username: admin
 password: 123456
 # 連接池配置
 clientName: soms-task # 客戶端的標識,用于定位請求來源等
 connectionTimeoutMs: 10000   # TCP連接超時,毫秒
 readTimeoutMs: 15000    # TCP讀取超時,毫秒
 poolMaxWaitTimeMs: 3000    #當連接池無可用連接時客戶端阻塞等待的時長,單位毫秒
 connectionMaxIdleTimeMs: 60000  #TCP連接閑置時間,單位毫秒
 connectionMaxLifeTimeMs: 120000  #TCP連接最多可以使用多久,單位毫秒
 heartbeatFrequencyMs: 20000   #心跳檢測發(fā)送頻率,單位毫秒
 minHeartbeatFrequencyMs: 8000  #最小的心跳檢測發(fā)送頻率,單位毫秒
 heartbeatConnectionTimeoutMs: 10000 #心跳檢測TCP連接超時,單位毫秒
 heartbeatReadTimeoutMs: 15000  #心跳檢測TCP連接讀取超時,單位毫秒
 connectionsPerHost: 100    # 每個host的TCP連接數(shù)
 minConnectionsPerHost: 5   #每個host的最小TCP連接數(shù)
 #計算允許多少個線程阻塞等待可用TCP連接時的乘數(shù),算法: threadsAllowedToBlockForConnectionMultiplier*connectionsPerHost,當前配置允許10*20個線程阻塞  
 threadsAllowedToBlockForConnectionMultiplier: 10

用來獲取配置參數(shù)的類

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import org.springframework.validation.annotation.Validated;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.util.List;
@Data
@Validated
@Component
@ConfigurationProperties(prefix = "mongodb")
public class MongoClientOptionProperties {
  /** 基礎(chǔ)連接參數(shù) */
 private String database;
 private String username;
 private String password;
 @NotNull
 private List<String> address;
 /** 客戶端連接池參數(shù) */
 @NotNull
 @Size(min = 1)
  private String clientName;
 /** socket連接超時時間 */
 @Min(value = 1)
  private int connectionTimeoutMs;
 /** socket讀取超時時間 */
 @Min(value = 1)
  private int readTimeoutMs;
 /** 連接池獲取鏈接等待時間 */
 @Min(value = 1)
  private int poolMaxWaitTimeMs;
 /** 連接閑置時間 */
 @Min(value = 1)
  private int connectionMaxIdleTimeMs;
 /** 連接最多可以使用多久 */
 @Min(value = 1)
  private int connectionMaxLifeTimeMs;
 /** 心跳檢測發(fā)送頻率 */
 @Min(value = 2000)
  private int heartbeatFrequencyMs;
 /** 最小的心跳檢測發(fā)送頻率 */
 @Min(value = 300)
  private int minHeartbeatFrequencyMs;
 /** 計算允許多少個線程阻塞等待時的乘數(shù),算法:threadsAllowedToBlockForConnectionMultiplier*connectionsPerHost */
 @Min(value = 1)
  private int threadsAllowedToBlockForConnectionMultiplier;
 /** 心跳檢測連接超時時間 */
 @Min(value = 200)
  private int heartbeatConnectionTimeoutMs;
 /** 心跳檢測讀取超時時間 */
 @Min(value = 200)
  private int heartbeatReadTimeoutMs;
 /** 每個host最大連接數(shù) */
 @Min(value = 1)
  private int connectionsPerHost;
 /** 每個host的最小連接數(shù) */
 @Min(value = 1)
  private int minConnectionsPerHost;
}

配置類

package com.alkin.soms.common.mongo;
import com.mongodb.MongoClient;
import com.mongodb.MongoClientOptions;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.MongoDbFactory;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.SimpleMongoDbFactory;
import org.springframework.data.mongodb.core.convert.*;
import org.springframework.data.mongodb.core.mapping.MongoMappingContext;
import java.util.ArrayList;
import java.util.List;
@Configuration
public class MongoConfig {
  private final Logger log = LoggerFactory.getLogger(MongoConfig.class);
 /**
 * 自定義mongo連接池 * * @param properties
 * @return
 */
 @Bean
 @Autowired public MongoDbFactory mongoDbFactory(MongoClientOptionProperties properties) {
    //創(chuàng)建客戶端參數(shù)
 MongoClientOptions options = mongoClientOptions(properties);
 //創(chuàng)建客戶端和Factory
 List<ServerAddress> serverAddresses = new ArrayList<>();
 for (String address : properties.getAddress()) {
      String[] hostAndPort = address.split(":");
 String host = hostAndPort[0];
 int port = Integer.parseInt(hostAndPort[1]);
 ServerAddress serverAddress = new ServerAddress(host, port);
 serverAddresses.add(serverAddress);
 }
    String username = properties.getUsername();
 String password = properties.getPassword();
 String database = properties.getDatabase();
 MongoClient mongoClient;
 if (StringUtils.isNotEmpty(username) && StringUtils.isNotEmpty(password)) {
      //創(chuàng)建認證客戶端
 MongoCredential mongoCredential = MongoCredential.createScramSha1Credential(
          username,
 database,
 password.toCharArray());
 mongoClient = new MongoClient(serverAddresses.get(0), mongoCredential, options);
 } else {
      //創(chuàng)建非認證客戶端
 mongoClient = new MongoClient(serverAddresses, options);
 }
    SimpleMongoDbFactory mongoDbFactory = new SimpleMongoDbFactory(mongoClient, database);
 log.info("mongodb注入成功");
 return mongoDbFactory;
 }
  @Bean(name = "mongoTemplate")
  @Autowired
 public MongoTemplate getMongoTemplate(MongoDbFactory mongoDbFactory) {
    return new MongoTemplate(mongoDbFactory);
 }
  /**
 * mongo客戶端參數(shù)配置 * * @return
 */
 public MongoClientOptions mongoClientOptions(MongoClientOptionProperties properties) {
    return MongoClientOptions.builder()
        .connectTimeout(properties.getConnectionTimeoutMs())
        .socketTimeout(properties.getReadTimeoutMs()).applicationName(properties.getClientName())
        .heartbeatConnectTimeout(properties.getHeartbeatConnectionTimeoutMs())
        .heartbeatSocketTimeout(properties.getHeartbeatReadTimeoutMs())
        .heartbeatFrequency(properties.getHeartbeatFrequencyMs())
        .minHeartbeatFrequency(properties.getMinHeartbeatFrequencyMs())
        .maxConnectionIdleTime(properties.getConnectionMaxIdleTimeMs())
        .maxConnectionLifeTime(properties.getConnectionMaxLifeTimeMs())
        .maxWaitTime(properties.getPoolMaxWaitTimeMs())
        .connectionsPerHost(properties.getConnectionsPerHost())
        .threadsAllowedToBlockForConnectionMultiplier(
            properties.getThreadsAllowedToBlockForConnectionMultiplier())
        .minConnectionsPerHost(properties.getMinConnectionsPerHost()).build();
 }
  @Bean
 public MappingMongoConverter mappingMongoConverter(MongoDbFactory factory, MongoMappingContext context, BeanFactory beanFactory) {
    DbRefResolver dbRefResolver = new DefaultDbRefResolver(factory);
 MappingMongoConverter mappingConverter = new MappingMongoConverter(dbRefResolver, context);
 try {
      mappingConverter.setCustomConversions(beanFactory.getBean(MongoCustomConversions.class));
 } catch (NoSuchBeanDefinitionException ignore) {
    }
    // Don't save _class to dao
 mappingConverter.setTypeMapper(new DefaultMongoTypeMapper(null));
 return mappingConverter;
 }
}

到此這篇關(guān)于springboot配置mongodb連接池的方法步驟的文章就介紹到這了,更多相關(guān)springboot配置mongodb連接池內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • Java通過自定義類加載器實現(xiàn)類隔離

    Java通過自定義類加載器實現(xiàn)類隔離

    類隔離是一種通過類加載器實現(xiàn)加載所需類的實現(xiàn)方式,使得不同版本類間隔離,避免了使用沖突問題。本文將通過自定義的類加載器實現(xiàn)類隔離,感興趣的可以了解一下
    2022-08-08
  • 新手小白入門必學JAVA面向?qū)ο笾鄳B(tài)

    新手小白入門必學JAVA面向?qū)ο笾鄳B(tài)

    說到多態(tài),一定離不開其它兩大特性:封裝和繼承,下面這篇文章主要給大家介紹了關(guān)于新手小白入門必學JAVA面向?qū)ο笾鄳B(tài)的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-02-02
  • Java中LocalDate的詳細方法舉例總結(jié)

    Java中LocalDate的詳細方法舉例總結(jié)

    這篇文章主要給大家介紹了關(guān)于Java中LocalDate詳細方法舉例的相關(guān)資料,LocalDate主要是用來處理日期的類,文中通過代碼示例介紹的非常詳細,需要的朋友可以參考下
    2023-09-09
  • 解決feign接口返回泛型設(shè)置屬性為null的問題

    解決feign接口返回泛型設(shè)置屬性為null的問題

    這篇文章主要介紹了解決feign接口返回泛型設(shè)置屬性為null的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • SpringCloud?Gateway讀取Request?Body方式

    SpringCloud?Gateway讀取Request?Body方式

    這篇文章主要介紹了SpringCloud?Gateway讀取Request?Body方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • 在SSM中配置了事務(wù)控制但沒生效的問題

    在SSM中配置了事務(wù)控制但沒生效的問題

    這篇文章主要介紹了在SSM中配置了事務(wù)控制但沒生效的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • SpringCloud高可用配置中心Config詳解

    SpringCloud高可用配置中心Config詳解

    Spring Cloud Config 是一個解決分布式系統(tǒng)的配置管理方案,它包含了 server 和 client 兩個部分,這篇文章主要介紹了SpringCloud之配置中心Config(高可用),需要的朋友可以參考下
    2022-04-04
  • java 二維數(shù)組矩陣乘法的實現(xiàn)方法

    java 二維數(shù)組矩陣乘法的實現(xiàn)方法

    java 二維數(shù)組矩陣乘法的實現(xiàn)方法,需要的朋友可以參考一下
    2013-03-03
  • Mybatis-Plus動態(tài)表名的實現(xiàn)示例

    Mybatis-Plus動態(tài)表名的實現(xiàn)示例

    面對復(fù)雜多變的業(yè)務(wù)需求,動態(tài)表名的處理變得愈發(fā)重要,本文主要介紹了Mybatis-Plus動態(tài)表名的實現(xiàn)示例,具有一定的參考價值,感興趣的可以了解一下
    2024-07-07
  • Spring Event事件通知機制解讀

    Spring Event事件通知機制解讀

    這篇文章主要介紹了Spring Event事件通知機制解讀,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02

最新評論

辽源市| 皮山县| 仪征市| 交城县| 瑞安市| 武穴市| 抚远县| 涡阳县| 鸡西市| 桐乡市| 桐庐县| 景宁| 孝感市| 宜宾市| 公安县| 惠安县| 金平| 营山县| 宿迁市| 青岛市| 油尖旺区| 闽侯县| 安丘市| 浙江省| 许昌市| 高雄市| 若尔盖县| 彭州市| 体育| 瑞金市| 青岛市| 嵊泗县| 渭源县| 葫芦岛市| 万荣县| 临西县| 公主岭市| 山东| 神木县| 阿勒泰市| 中阳县|