perf[orm]: 简化了数据库mongodb的连接配置

This commit is contained in:
jaysunxiao
2021-06-10 20:35:48 +08:00
parent a5b01b3d54
commit 539c8d4da8
7 changed files with 72 additions and 18 deletions
+3 -1
View File
@@ -42,7 +42,9 @@ OrmContext.getAccessor().update(obj);
```
<orm:config id="config" entity-package="com.zfoo.orm.**.entity">
<orm:host database="test" url="mongodb://127.0.0.1:27017" />
<orm:host database="test" user="" password="">
<orm:address name="server0" url="127.0.0.1:27017"/>
</orm:host>
<!-- 缓存策略 -->
<orm:caches>
@@ -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;
@@ -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<String, String> addressMap;
public static HostConfig valueOf(String database, String user, String password, Map<String, String> 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<String, String> getAddressMap() {
return addressMap;
}
public void setAddressMap(Map<String, String> addressMap) {
this.addressMap = addressMap;
}
}
@@ -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());
}
+9
View File
@@ -28,7 +28,16 @@
</xsd:element>
<xsd:complexType name="addressType">
<xsd:sequence>
<xsd:element name="address" maxOccurs="unbounded" type="addressAttributeType"/>
</xsd:sequence>
<xsd:attribute name="database" type="xsd:string" use="required"/>
<xsd:attribute name="user" type="xsd:string" use="required"/>
<xsd:attribute name="password" type="xsd:string" use="required"/>
</xsd:complexType>
<xsd:complexType name="addressAttributeType">
<xsd:attribute name="name" type="xsd:string" use="required"/>
<xsd:attribute name="url" type="xsd:string" use="required"/>
</xsd:complexType>
+3 -1
View File
@@ -21,7 +21,9 @@
<orm:config id="config" entity-package="com.zfoo.orm.**.entity">
<orm:host database="${mongodb.database}" url="${mongodb.url}"/>
<orm:host database="${mongodb.database}" user="${mongodb.user}" password="${mongodb.password}">
<orm:address name="${mongodb.address.name}" url="${mongodb.address.url}"/>
</orm:host>
<!-- 缓存策略 -->
<orm:caches>
+4 -3
View File
@@ -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
mongodb.user=
mongodb.password=
mongodb.address.name=server0
mongodb.address.url=127.0.0.1:27017