Debido a que el desarrollo de hoy encontró problemas de rendimiento, que pueden estar relacionados con la conexión MongoDB, eché un vistazo más de cerca y descubrí que alguien había escrito este contenido relacionado, así que lo reimprimí. Cuando tenga tiempo, puede escribir una extensión a Springforall, y la idea del tema sigue siendo la misma. ¡Gracias a esta hermosa chica, Joy Yuan por su artículo!
ilustrar
Spring Boot utiliza Data-MongoDB de Spring-Boot-Starter para implementar la configuración automática de Data-Data-MongoDB.
Sin embargo, de forma predeterminada, Spring Boot no proporciona funciones de configuración del grupo de conexión como usar MySQL o Redis. Por lo tanto, necesitamos reescribir a MongoDBFactory por nosotros mismos para implementar la extensión de configuración de parámetros de la conexión del cliente MongoDB.
Cabe señalar que el cliente MongoDB en sí es un grupo de conexión, por lo que solo necesitamos configurar el cliente.
Archivo de configuración
Para unificar la configuración del arranque de Spring, necesitamos configurar la configuración reescrita en Application.yml, con el prefijo como Spring.Data.MongoDB.Custom (el prefijo se puede configurar a voluntad)::
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
En este ejemplo de configuración, se configura un conjunto de réplicas, incluidos los hosts 10.0.5.1:27017 y 10.0.5.1:27018. Otras configuraciones son similares a la configuración estándar de Spring Boot. Además, Connections-Per-Host es el número de conexiones con el cliente, y las conectiones por huésped es el número mínimo de conexiones con el cliente.
Envolver la configuración en clase
Para conveniencia de llamadas y legibilidad, la configuración anterior está envuelta en una clase de entidad de configuración. El código mongoconfig.java es el siguiente:
paquete com.feidiao.jancee.fdiot.api.config.mongo; importar org.hibernate.validator.constraints.notblank; importar org.hibernate.validator.constaints.notempty; import org.springframework.validation.annotation.validated; import java.util.list;@componente@validatedpublic clase mongosettingsproperties {@NotBlank Base de datos de cadenas privadas; @Notempty Lista privada <String> hosts; @Notempty Lista privada <integer> puertos; replicación de cadena privada; nombre de usuario de cadena privada; contraseña de cadena privada; autenticación de cadena privadaDatabase; Integer privado Minconnectionsperhost = 10; Integer ConnectionsPerhost de enteros privados = 2; public MongoSettingsProperties () {} public String getDatabase () {Base de datos de retorno; } public void setDatabase (base de datos de cadena) {this.database = database; } Lista pública <String> gethosts () {return hosts; } public void sethosts (list <string> hosts) {this.hosts = hosts; } Lista pública <integer> getPorts () {return Ports; } public void setports (list <integer> puertos) {this.ports = puertos; } 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 = contraseña; } 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; }}Sobrescribir MongoDbFactory
A continuación, sobrescribe el bean MongoDbFactory original de Spring Boot y cree un nuevo archivo mongoconfig.java, con el código de la siguiente manera:
import com.mongoDB.MongoClient; import com.MongoDB.MongoClientOptions; import com.mongoDB.MongoCredential; import Com.MonGodb.ServerAddress; import Org.SpringFramework.Beanss.Factory.Annotation.AutoWower org.springframework.context.annotation.bean; import org.springframework.context.annotation.configuration; import org.springframework.data.mongoDB.MongoDbfactory; import og.springfringframe.mongodb.core.ssemongodbfactory; importación de importación. java.util.list; @configurationPublic clase MongoConfig {// Entidad de configuración de inyección @AUTOWired private Mongosettingsproperties MongosettingsProperties; @Bean @ConfigurationProperties (prefix = "Spring.Data.MongoDB.Custom") MongosettingsProperties MongosettingsProperties () {return New MongoSettingsProperties (); } // Sobrescribe la MongoDBFactory @Bean MongoDBFactory MongoDBFactory () {// Configuración del cliente (número de conexiones, verificación de clúster réplica) MongoClientOptions.Builder Builder = new MongoClientOptions.Builder (); Builder.ConnectionsPerhost (Mongosettingsproperties.getConnectionsPerhost ()); Builder.MinconnectionsPerhost (Mongosettingsproperties.getMinconnectionsPerhost ()); if (mongostingsproperties.getRePlicAset ()! = null) {builder.RequiredRePlicAsetName (MongoSettingsProperties.getReplicAset ()); } MongoClientOptions MongoClientOptions = Builder.Build (); // Lista de direcciones MongoDB <ServerAddress> ServerAddresses = new ArrayList <> (); for (host de cadena: mongostingsproperties.gethosts ()) {integer index = mongostingsproperties.gethosts (). indexOf (host); Integer Port = MongosettingsProperties.getPorts (). Get (índice); ServerAddress ServerAddress = new ServerAddress (host, puerto); serverAddresses.Add (ServerAddress); } System.out.println ("ServerAddresses:" + serverAddresses.ToString ()); // Lista de autenticación de conexión <MongoCredential> MongoCredentialList = new ArrayList <> (); if (MongoSettingsProperties.getUsername ()! = NULL) {MongoCredentialList.Add (MongoCredential.CreateScramsha1Credential (MongoSettingsProperties.getUsername (), MongoSettingsProperties.getAuthenticationDataabase ()! : mongostingsproperties.getDatabase (), mongostingsproperties.getPassword (). toCarArray ())); } System.out.println ("MongoCredentialList:" + MongoCredentialList.ToString ()); // Crear MongoClient de MongoClient de clientes y fábricas = nuevo MongoClient (ServerAddresses, MongoCredentiallist, MongoClientOptions); MongoDBFactory MongoDBFactory = new SimpleMonGodBFactory (MongoClient, MongoSettingsProperties.getDatabase ()); return MongoDBFactory; }}Aquí, cuando se implementa la conexión MongoDB, se establecen los parámetros configurados en la configuración anterior. De acuerdo con su situación real, puede agregar y modificar los parámetros de configuración que necesita cuando SimpleMongodBFactory.
En este punto, todas las configuraciones se han completado y las pruebas se han ejecutado.
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.