Parce que le développement d'aujourd'hui a rencontré des problèmes de performance, qui peuvent être liés à la connexion MongoDB, j'ai regardé de plus près et j'ai constaté que quelqu'un avait écrit ce contenu connexe, alors je l'ai réimprimé. Lorsque vous avez le temps, vous pouvez écrire une extension à Springforall, et l'idée du sujet est toujours la même. Merci à cette belle fille, Joy Yuan pour son article!
illustrer
Spring Boot utilise Spring-Boot-Starter-Data-MongoDB pour implémenter la configuration automatique de Spring-Data-MongoDB.
Cependant, par défaut, Spring Boot ne fournit pas de fonctions de configuration de pool de connexion comme l'utilisation de MySQL ou Redis. Par conséquent, nous devons réécrire MongoDBFactory par nous-mêmes pour implémenter l'extension de configuration des paramètres de la connexion client MongoDB.
Il convient de noter que le client MongoDB lui-même est un pool de connexion, nous n'avons donc qu'à configurer le client.
Fichier de configuration
Afin d'unifier la configuration de Spring Boot, nous devons configurer la configuration réécrite dans Application.yml, avec le préfixe comme Spring.data.mongodb.custom (le préfixe peut être configuré à volonté):
Spring: Données: MongoDB: Custom: Hosts: - 10.0.5.1 - 10.0.5.1 Ports: - 27017 - 27018 Réplique-ensemble: MGSET-3590061 Nom d'utilisateur: Jancee Mot de passe: ABC123 Database: Jancee Authentication-Database: Admin Connection-Per-Host: 20 min-Connections-Per-Host: 20
Dans cet exemple de configuration, un ensemble de répliques est configuré, y compris les hôtes 10.0.5.1:27017 et 10.0.5.1:27018. Les autres configurations sont similaires à la configuration standard de Spring Boot. De plus, les connexions par hôte sont le nombre de connexions au client, et les connexions par hôte sont le nombre minimum de connexions au client.
Configuration d'emballage en classe
Pour plus de commodité de l'appel et de la lisibilité, la configuration ci-dessus est enveloppée dans une classe d'entité de configuration. Le code MongoConfig.java est le suivant:
package com.feidiao.jancee.fdiot.api.config.mongo; import org.hibernate.validator.constraints.notblank; import org.hibernate.validator.constraints.notempty; import org.springframework.sterreotype.Component; org.springframework.validation.annotation.validated; import java.util.list; @ composant @ validedPublic classe mongosettingsproperties {@notblank private string basase; @Notempty Private List <string> hôtes; @Notempty Private List <Integer> ports; réplique de chaîne privée; Nom d'utilisateur de chaîne privée; mot de passe de chaîne privé; Authentification de chaîne privée AuthenticationDatabase; entier privé MinConnectionsPerHost = 10; Connections entières privées PERRHOST = 2; public mongosettingsproperties () {} public String getDatabase () {return database; } public void setDatabase (String Database) {this.database = base de données; } 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 <nteger> ports) {this.ports = ports; } public String getReplicAset () {return répliqueT; } public void setReplicAset (String répliquet) {this.replicaset = réplicaset; } public String getUserName () {return username; } public void setUsername (String username) {this.userName = username; } public String getPassword () {return mot de passe; } public void setPassword (String Motword) {this.password = mot de passe; } public String GetAuthenticationDatabase () {return AuthenticationDatabase; } public void setAuthenticationDatabase (String AuthenticationDatabase) {this.authenticationDatabase = AuthenticationDatabase; } public entier getMinconnectionPerHost () {return minConnectionSperHost; } public void setMinconnectionsPerHost (entier minconnectionsperhost) {this.MinconnectionsPerHost = minConnectionsPerHost; } public entier getConnectionsPerHost () {return ConnectionsPerHost; } public void setConnectionsPerHost (entier ConnectionsPerHost) {this.connectionsPerHost = ConnectionsPerHost; }}Écraser MongoDBFactory
Ensuite, écrasez le bean MongoDBFactory d'origine de Spring Boot et créez un nouveau fichier MongoConfig.java, avec le code comme suit:
import com.mongodb.mongoclient; import com.mongodb.mongoclientOptions; import com.mongodb.mongocredential; import com.mongodb.serveraddress; import org.springframework.beans.factory.annotation. org.springframework.boot.context.properties.configurationproperties; import org.springframework.context.annotation.bean; import org.springframework.contex org.springframework.data.mongodb.core.simplemongodbfactory; import java.util.arraylist; import java.util.list; @configurationpublic classe mongoconfig {// inject configuration entity @autowired private MongoSettingSproperties MongoSettingsproperties; @Bean @configurationproperties (prefix = "spring.data.mongodb.custom") MongoSettingSproperties MongoSettingSproperties () {return new MongoSettingSproperties (); } // Écraser le mongodbfactory par défaut @Bean MongoDBFactory MongoDBFactory () {// Configuration du client (nombre de connexions, vérification des cluster de répliques) MongoclientOptions.builder builder = new MongoclientOptions.builder (); builder.connectionsperhost (MongoSettingSproperties.getConnectionsPerHost ()); builder.MinconnectionPerHost (MongoSettingSproperties.getMinconnectionsPerHost ()); if (MongoSettingSproperties.getReplicAset ()! = null) {builder.requiredReplicAsetName (MongoSettingSproperties.getReplicAset ()); } MongoclientOptions MongoclientOptions = builder.build (); // MongoDB ADRESS LIST LISTE <SERVERADRESS> ServerAddress = new ArrayList <> (); for (String Host: MongoSettingSproperties.Gethosts ()) {Integer index = MongoSettingSproperties.Gethosts (). IndexOf (host); Port entier = mongosettingsproperties.getports (). Get (index); ServerAddress ServerAddress = new ServerAddress (hôte, port); serverAddress.Add (serverAddress); } System.out.println ("ServerAddress:" + ServerAddress.ToString ()); // Liste d'authentification de la connexion <MongoCrediEntial> MongoCredentialList = new ArrayList <> (); if (MongoSettingSproperties.geTuSername ()! = null) {MongoCredentialList.add (MongoCredential.CreateScramsha1Credential (MongoSettingSproperties.geturname (), MongosettingSproperties.getAuthenticationDatabase ()! = Null? MongoSettingSproperties.GetAuthenticationDatabase (): MongoSettingSproperties.getDatabase (), MongoSettingSproperties.getPassword (). TOCHARARRAY ())); } System.out.println ("MongoCredentialList:" + MongoCredentialList.ToString ()); // Créer le client et le mongoclient mongoclient mongoclient = new mongoclient (serveraddress, MongocredentialList, MongoclientOptions); MongoDBFactory MongoDBFactory = Nouveau SimpleMongoDBFactory (Mongoclient, MongoSettingSproperties.getDatabase ()); retour MongoDBFactory; }}Ici, lorsque la connexion MongoDB est implémentée, les paramètres configurés dans la configuration précédente sont définis. Selon votre situation réelle, vous pouvez ajouter et modifier les paramètres de configuration dont vous avez besoin lorsqu'ils sont nouveaux SimpleMongoDBFactory.
À ce stade, toutes les configurations ont été effectuées et les tests ont été exécutés.
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.