简约网站首页,华为云云速建站教程,湖南城市建设技术学院官方网站,网站上做旅游卖家要学什么因为今天开发遇到了性能问题#xff0c;可能与MongoDB的连接有关#xff0c;所以稍稍深入看了一下#xff0c;正好搜到原来有人写过这篇相关的内容#xff0c;所以转载过来。回头有时间可以写个扩展到SpringForAll里#xff0c;主体思路还是一样的。感谢这位美女程序媛的文… 因为今天开发遇到了性能问题可能与MongoDB的连接有关所以稍稍深入看了一下正好搜到原来有人写过这篇相关的内容所以转载过来。回头有时间可以写个扩展到SpringForAll里主体思路还是一样的。感谢这位美女程序媛的文章 说明
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;ComponentValidatedpublic class MongoSettingsProperties { NotBlank private String database; NotEmpty private ListString hosts; NotEmpty private ListInteger 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 ListString getHosts() { return hosts; } public void setHosts(ListString hosts) { this.hosts hosts; } public ListInteger getPorts() { return ports; } public void setPorts(ListInteger 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;Configurationpublic 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地址列表 ListServerAddress 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()); // 连接认证 ListMongoCredential 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时增加修改自己需要的配置参数。
至此就完成了全部配置运行测试即可。