오늘날의 개발은 MongoDB 연결과 관련이있을 수있는 성능 문제에 직면했기 때문에 자세히 살펴보고 누군가이 관련 콘텐츠를 작성한 것을 발견했습니다. 그래서 나는 그것을 재 인쇄했습니다. 시간이 있으면 Springforall에 확장을 쓸 수 있으며 주제 아이디어는 여전히 동일합니다. 이 아름다운 소녀 덕분에 그녀의 기사에 대한 Joy Yuan!
설명
Spring Boot는 Spring-Boot-Starter-Data-MongoDB를 사용하여 Spring-Data-MongoDB의 자동 구성을 구현합니다.
그러나 기본적으로 Spring Boot는 MySQL 또는 Redis 사용과 같은 연결 풀 구성 기능을 제공하지 않습니다. 따라서 MongoDB 클라이언트 연결의 매개 변수 구성 확장을 구현하려면 MongoDBFactory를 스스로 작성해야합니다.
MongoDB 클라이언트 자체는 연결 풀이므로 클라이언트 만 구성하면됩니다.
구성 파일
Spring Boot의 구성을 통합하려면 Prefix를 spring.data.mongodb.custom으로 사용하여 application.yml로 다시 작성된 구성을 구성해야합니다 (접두사는 마음대로 구성 할 수 있음).
Spring : MongoDB : Custom : Hosts : -10.0.5.1-10.5.1 포트 : -27017-27018 복제본 설정 : MGSET-3590061 사용자 이름 : JANCEE 암호 : ABC123 데이터베이스 : Jancee Authentication-Database : Adminections-Per-Host : 20 Min-Connection-Per-Host : 20
이 구성 예에서 호스트 10.0.5.1:27017 및 10.0.5.1:27018을 포함하여 복제 세트가 구성됩니다. 다른 구성은 Spring Boot의 표준 구성과 유사합니다. 또한, 호스트 당 연결은 클라이언트와의 연결 수이며, 호스트 당 연결은 클라이언트와의 최소 연결 수입니다.
구성을 클래스로 래핑합니다
통화 및 가독성의 편의를 위해 위의 구성은 구성 엔티티 클래스로 포장됩니다. 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.stereotyp.component; org.springframework.validation.annotation.validated; import java.util.list;@component@validationpublic class mongosettingsproperties {@notblank 개인 문자열 데이터베이스; @notempty private list <string> 호스트; @Notempty 개인 목록 <Integer> 포트; 개인 문자열 복제품; 개인 문자열 사용자 이름; 개인 문자열 비밀번호; 개인 문자열 authenticationDatabase; 개인 정수 MinConnectionsPerhost = 10; 개인 정수 ConnectionsPerhost = 2; public mongosettingsproperties () {} public string getDatabase () {return database; } public void setDatabase (String Database) {this.database = 데이터베이스; } public list <string> gethosts () {return hosts; } public void sethosts (list <string> hosts) {this.hosts = hosts; } 공개 목록 <integer> getports () {반환 포트; } public void setports (list <integer> 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 (문자열 비밀번호) {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.MincOntessPerHost = 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.sprameframework.beans.beans.annotation.autowed; import org.springframewort.boot.context org.springframework.context.annotation.bean; import org.springframework.context.annotation.configuration; import org.spramframework.data.mongodb.mongodbfactory; import org.spramework.data.mongodb.core.simplemongbfactory; java.util.list; @configurationpublic class mongoconfig {// configuration entity @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 주소 목록 목록 <ServerAddress> serverAddresses = new ArrayList <> (); for (문자열 호스트 : mongosettingsproperties.gethosts ()) {정수 색인 = mongosettingsproperties.gethosts (). indexof (host); 정수 포트 = mongosettingsproperties.getports (). get (index); ServerAddress ServerAddress = 새로운 ServerAddress (호스트, 포트); serverAddresses.add (serverAddress); } system.out.println ( "ServerAddresses :" + serverAddresses.toString ()); // 연결 인증 목록 <MongoCredential> 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 ()); // 클라이언트 및 공장 생성 Mongoclient Mongoclient = New Mongoclient (ServerAddresses, Mongocredentiallist, Mongoclientoptions); mongbbactory mongodbfactory = 새로운 simplemongodbfactory (mongoclient, mongosettingsproperties.getDatabase ()); Mongodbfactory를 반환합니다. }}여기서 MongoDB 연결이 구현되면 이전 구성에서 구성된 매개 변수가 설정됩니다. 실제 상황에 따라 새로운 SimpleMongoDBFactory시 필요한 구성 매개 변수를 추가하고 수정할 수 있습니다.
이 시점에서 모든 구성이 완료되고 테스트가 실행되었습니다.
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.