From 539c8d4da8e5b1f7fb47b3d3aea868de87b8eecf Mon Sep 17 00:00:00 2001 From: jaysunxiao Date: Thu, 10 Jun 2021 20:35:48 +0800 Subject: [PATCH] =?UTF-8?q?perf[orm]:=20=E7=AE=80=E5=8C=96=E4=BA=86?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=BA=93mongodb=E7=9A=84=E8=BF=9E=E6=8E=A5?= =?UTF-8?q?=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- orm/README.md | 4 +- .../java/com/zfoo/orm/manager/OrmManager.java | 20 +++++++--- .../com/zfoo/orm/model/config/HostConfig.java | 40 ++++++++++++++++--- .../zfoo/orm/schema/OrmDefinitionParser.java | 6 ++- orm/src/main/resources/orm-1.0.xsd | 9 +++++ orm/src/test/resources/application.xml | 4 +- orm/src/test/resources/deploy-dev.properties | 7 ++-- 7 files changed, 72 insertions(+), 18 deletions(-) diff --git a/orm/README.md b/orm/README.md index 0753f064..93c80f36 100644 --- a/orm/README.md +++ b/orm/README.md @@ -42,7 +42,9 @@ OrmContext.getAccessor().update(obj); ``` - + + + diff --git a/orm/src/main/java/com/zfoo/orm/manager/OrmManager.java b/orm/src/main/java/com/zfoo/orm/manager/OrmManager.java index aea2ed7e..1be0f40b 100644 --- a/orm/src/main/java/com/zfoo/orm/manager/OrmManager.java +++ b/orm/src/main/java/com/zfoo/orm/manager/OrmManager.java @@ -13,8 +13,9 @@ package com.zfoo.orm.manager; -import com.mongodb.ConnectionString; import com.mongodb.MongoClientSettings; +import com.mongodb.MongoCredential; +import com.mongodb.ServerAddress; import com.mongodb.client.*; import com.mongodb.client.model.IndexOptions; import com.mongodb.client.model.Indexes; @@ -25,10 +26,10 @@ import com.zfoo.orm.model.config.OrmConfig; import com.zfoo.orm.model.entity.IEntity; import com.zfoo.orm.model.vo.EntityDef; import com.zfoo.protocol.collection.CollectionUtils; -import com.zfoo.protocol.exception.RunException; import com.zfoo.protocol.util.AssertionUtils; import com.zfoo.protocol.util.JsonUtils; import com.zfoo.protocol.util.StringUtils; +import com.zfoo.util.net.HostAndPort; import org.bson.Document; import org.bson.codecs.configuration.CodecRegistries; import org.bson.codecs.configuration.CodecRegistry; @@ -86,13 +87,20 @@ public class OrmManager implements IOrmManager { .builder() .codecRegistry(pojoCodecRegistry); - // 设置数据库连接地址,数据库账号密码 + // 设置数据库地址 var hostConfig = ormConfig.getHostConfig(); - if (StringUtils.isBlank(hostConfig.getUrl())) { - throw new RunException("数据库MongoDB的连接地址url不能为空,请检查orm的配置"); + if (CollectionUtils.isNotEmpty(hostConfig.getAddressMap())) { + var hostList = HostAndPort.toHostAndPortList(hostConfig.getAddressMap().values()) + .stream() + .map(it -> new ServerAddress(it.getHost(), it.getPort())) + .collect(Collectors.toList()); + mongoBuilder.applyToClusterSettings(builder -> builder.hosts(hostList)); } - mongoBuilder.applyToClusterSettings(builder -> builder.applyConnectionString(new ConnectionString(hostConfig.getUrl()))); + // 设置数据库账号密码 + if (!StringUtils.isBlank(hostConfig.getUser()) && !StringUtils.isBlank(hostConfig.getPassword())) { + mongoBuilder.credential(MongoCredential.createCredential(hostConfig.getUser(), "admin", hostConfig.getPassword().toCharArray())); + } // 设置连接池的大小 var maxConnection = Runtime.getRuntime().availableProcessors() * 2 + 1; diff --git a/orm/src/main/java/com/zfoo/orm/model/config/HostConfig.java b/orm/src/main/java/com/zfoo/orm/model/config/HostConfig.java index 6e441882..e7e2997c 100644 --- a/orm/src/main/java/com/zfoo/orm/model/config/HostConfig.java +++ b/orm/src/main/java/com/zfoo/orm/model/config/HostConfig.java @@ -13,6 +13,8 @@ package com.zfoo.orm.model.config; +import java.util.Map; + /** * @author jaysunxiao * @version 3.0 @@ -20,8 +22,18 @@ package com.zfoo.orm.model.config; public class HostConfig { private String database; - // 连接地址 - private String url; + private String user; + private String password; + private Map addressMap; + + public static HostConfig valueOf(String database, String user, String password, Map addressMap) { + HostConfig config = new HostConfig(); + config.database = database; + config.user = user; + config.password = password; + config.addressMap = addressMap; + return config; + } public String getDatabase() { return database; @@ -31,11 +43,27 @@ public class HostConfig { this.database = database; } - public String getUrl() { - return url; + public String getUser() { + return user; } - public void setUrl(String url) { - this.url = url; + public void setUser(String user) { + this.user = user; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public Map getAddressMap() { + return addressMap; + } + + public void setAddressMap(Map addressMap) { + this.addressMap = addressMap; } } diff --git a/orm/src/main/java/com/zfoo/orm/schema/OrmDefinitionParser.java b/orm/src/main/java/com/zfoo/orm/schema/OrmDefinitionParser.java index b024064a..c57eb6d3 100644 --- a/orm/src/main/java/com/zfoo/orm/schema/OrmDefinitionParser.java +++ b/orm/src/main/java/com/zfoo/orm/schema/OrmDefinitionParser.java @@ -105,7 +105,11 @@ public class OrmDefinitionParser implements BeanDefinitionParser { var builder = BeanDefinitionBuilder.rootBeanDefinition(clazz); resolvePlaceholder("database", "database", builder, element, parserContext); - resolvePlaceholder("url", "url", builder, element, parserContext); + resolvePlaceholder("user", "user", builder, element, parserContext); + resolvePlaceholder("password", "password", builder, element, parserContext); + + var addressMap = parseAddress(element, parserContext); + builder.addPropertyValue("addressMap", addressMap); parserContext.getRegistry().registerBeanDefinition(clazz.getCanonicalName(), builder.getBeanDefinition()); } diff --git a/orm/src/main/resources/orm-1.0.xsd b/orm/src/main/resources/orm-1.0.xsd index 38497d48..00ad0f51 100644 --- a/orm/src/main/resources/orm-1.0.xsd +++ b/orm/src/main/resources/orm-1.0.xsd @@ -28,7 +28,16 @@ + + + + + + + + + diff --git a/orm/src/test/resources/application.xml b/orm/src/test/resources/application.xml index effbde38..c97194bf 100644 --- a/orm/src/test/resources/application.xml +++ b/orm/src/test/resources/application.xml @@ -21,7 +21,9 @@ - + + + diff --git a/orm/src/test/resources/deploy-dev.properties b/orm/src/test/resources/deploy-dev.properties index 08a59646..b80ea996 100644 --- a/orm/src/test/resources/deploy-dev.properties +++ b/orm/src/test/resources/deploy-dev.properties @@ -1,4 +1,5 @@ mongodb.database=test -mongodb.url=mongodb://127.0.0.1:27017 -#mongodb.url=mongodb://user:pasword@127.0.0.1:27017 -#mongodb.url=mongodb://user:pasword@127.0.0.1:27017/admin?replicaSet=setName \ No newline at end of file +mongodb.user= +mongodb.password= +mongodb.address.name=server0 +mongodb.address.url=127.0.0.1:27017 \ No newline at end of file