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

This commit is contained in:
jaysunxiao
2021-06-10 16:31:11 +08:00
parent d42816bf03
commit a5b01b3d54
7 changed files with 19 additions and 73 deletions
+1 -3
View File
@@ -42,9 +42,7 @@ OrmContext.getAccessor().update(obj);
```
<orm:config id="config" entity-package="com.zfoo.orm.**.entity">
<orm:host database="test" user="" password="">
<orm:address name="server0" url="127.0.0.1:27017"/>
</orm:host>
<orm:host database="test" url="mongodb://127.0.0.1:27017" />
<!-- 缓存策略 -->
<orm:caches>
@@ -13,9 +13,8 @@
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;
@@ -26,10 +25,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;
@@ -87,23 +86,16 @@ public class OrmManager implements IOrmManager {
.builder()
.codecRegistry(pojoCodecRegistry);
// 设置数据库地址
// 设置数据库连接地址,数据库账号密码
var hostConfig = ormConfig.getHostConfig();
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));
if (StringUtils.isBlank(hostConfig.getUrl())) {
throw new RunException("数据库MongoDB的连接地址url不能为空,请检查orm的配置");
}
// 设置数据库账号密码
if (!StringUtils.isBlank(hostConfig.getUser()) && !StringUtils.isBlank(hostConfig.getPassword())) {
mongoBuilder.credential(MongoCredential.createCredential(hostConfig.getUser(), "admin", hostConfig.getPassword().toCharArray()));
}
mongoBuilder.applyToClusterSettings(builder -> builder.applyConnectionString(new ConnectionString(hostConfig.getUrl())));
// 设置连接池的大小
var maxConnection = Runtime.getRuntime().availableProcessors() * 3 + 1;
var maxConnection = Runtime.getRuntime().availableProcessors() * 2 + 1;
mongoBuilder.applyToConnectionPoolSettings(builder -> builder.maxSize(maxConnection).minSize(1));
mongoClient = MongoClients.create(mongoBuilder.build());
@@ -13,8 +13,6 @@
package com.zfoo.orm.model.config;
import java.util.Map;
/**
* @author jaysunxiao
* @version 3.0
@@ -22,18 +20,8 @@ import java.util.Map;
public class HostConfig {
private String database;
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;
}
// 连接地址
private String url;
public String getDatabase() {
return database;
@@ -43,27 +31,11 @@ public class HostConfig {
this.database = database;
}
public String getUser() {
return user;
public String getUrl() {
return 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;
public void setUrl(String url) {
this.url = url;
}
}
@@ -105,11 +105,7 @@ public class OrmDefinitionParser implements BeanDefinitionParser {
var builder = BeanDefinitionBuilder.rootBeanDefinition(clazz);
resolvePlaceholder("database", "database", builder, element, parserContext);
resolvePlaceholder("user", "user", builder, element, parserContext);
resolvePlaceholder("password", "password", builder, element, parserContext);
var addressMap = parseAddress(element, parserContext);
builder.addPropertyValue("addressMap", addressMap);
resolvePlaceholder("url", "url", builder, element, parserContext);
parserContext.getRegistry().registerBeanDefinition(clazz.getCanonicalName(), builder.getBeanDefinition());
}
-9
View File
@@ -28,16 +28,7 @@
</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>
+1 -3
View File
@@ -21,9 +21,7 @@
<orm:config id="config" entity-package="com.zfoo.orm.**.entity">
<orm:host database="${mongodb.database}" user="${mongodb.user}" password="${mongodb.password}">
<orm:address name="${mongodb.address.name}" url="${mongodb.address.url}"/>
</orm:host>
<orm:host database="${mongodb.database}" url="${mongodb.url}"/>
<!-- 缓存策略 -->
<orm:caches>
+3 -4
View File
@@ -1,5 +1,4 @@
mongodb.database=test
mongodb.user=
mongodb.password=
mongodb.address.name=server0
mongodb.address.url=127.0.0.1:27017
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