久久r热视频,国产午夜精品一区二区三区视频,亚洲精品自拍偷拍,欧美日韩精品二区

您的位置:首頁技術(shù)文章
文章詳情頁

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

瀏覽:10日期:2023-03-28 16:11:27

application.yml 配置

mongodb: address: localhost:27017 database: soms username: admin password: 123456 # 連接池配置 clientName: soms-task # 客戶端的標(biāo)識(shí),用于定位請(qǐng)求來源等 connectionTimeoutMs: 10000 # TCP連接超時(shí),毫秒 readTimeoutMs: 15000 # TCP讀取超時(shí),毫秒 poolMaxWaitTimeMs: 3000 #當(dāng)連接池?zé)o可用連接時(shí)客戶端阻塞等待的時(shí)長,單位毫秒 connectionMaxIdleTimeMs: 60000 #TCP連接閑置時(shí)間,單位毫秒 connectionMaxLifeTimeMs: 120000 #TCP連接最多可以使用多久,單位毫秒 heartbeatFrequencyMs: 20000 #心跳檢測(cè)發(fā)送頻率,單位毫秒 minHeartbeatFrequencyMs: 8000 #最小的心跳檢測(cè)發(fā)送頻率,單位毫秒 heartbeatConnectionTimeoutMs: 10000 #心跳檢測(cè)TCP連接超時(shí),單位毫秒 heartbeatReadTimeoutMs: 15000 #心跳檢測(cè)TCP連接讀取超時(shí),單位毫秒 connectionsPerHost: 100 # 每個(gè)host的TCP連接數(shù) minConnectionsPerHost: 5 #每個(gè)host的最小TCP連接數(shù) #計(jì)算允許多少個(gè)線程阻塞等待可用TCP連接時(shí)的乘數(shù),算法: threadsAllowedToBlockForConnectionMultiplier*connectionsPerHost,當(dāng)前配置允許10*20個(gè)線程阻塞 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連接超時(shí)時(shí)間 */ @Min(value = 1) private int connectionTimeoutMs; /** socket讀取超時(shí)時(shí)間 */ @Min(value = 1) private int readTimeoutMs; /** 連接池獲取鏈接等待時(shí)間 */ @Min(value = 1) private int poolMaxWaitTimeMs; /** 連接閑置時(shí)間 */ @Min(value = 1) private int connectionMaxIdleTimeMs; /** 連接最多可以使用多久 */ @Min(value = 1) private int connectionMaxLifeTimeMs; /** 心跳檢測(cè)發(fā)送頻率 */ @Min(value = 2000) private int heartbeatFrequencyMs; /** 最小的心跳檢測(cè)發(fā)送頻率 */ @Min(value = 300) private int minHeartbeatFrequencyMs; /** 計(jì)算允許多少個(gè)線程阻塞等待時(shí)的乘數(shù),算法:threadsAllowedToBlockForConnectionMultiplier*connectionsPerHost */ @Min(value = 1) private int threadsAllowedToBlockForConnectionMultiplier; /** 心跳檢測(cè)連接超時(shí)時(shí)間 */ @Min(value = 200) private int heartbeatConnectionTimeoutMs; /** 心跳檢測(cè)讀取超時(shí)時(shí)間 */ @Min(value = 200) private int heartbeatReadTimeoutMs; /** 每個(gè)host最大連接數(shù) */ @Min(value = 1) private int connectionsPerHost; /** 每個(gè)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;@Configurationpublic 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)建認(rèn)證客戶端 MongoCredential mongoCredential = MongoCredential.createScramSha1Credential( username, database, password.toCharArray()); mongoClient = new MongoClient(serverAddresses.get(0), mongoCredential, options); } else { //創(chuàng)建非認(rèn)證客戶端 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)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Spring
相關(guān)文章:
主站蜘蛛池模板: 吉安市| 平乡县| 米易县| 巫溪县| 山西省| 正定县| 迁安市| 丰原市| 雷山县| 仁化县| 宁海县| 广水市| 塔河县| 灵石县| 师宗县| 汤原县| 称多县| 新宁县| 当雄县| 克东县| 资阳市| 松原市| 太湖县| 六枝特区| 津南区| 郸城县| 师宗县| 廉江市| 梅州市| 那坡县| 剑川县| 航空| 介休市| 双城市| 保亭| 临泽县| 噶尔县| 开封市| 北安市| 旺苍县| 涿州市|