mirror of
https://github.com/tiennm99/zfoo.git
synced 2026-05-22 16:26:52 +00:00
perf[orm]: 简化了数据库mongodb的连接配置
This commit is contained in:
+3
-1
@@ -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());
|
||||
}
|
||||
|
||||
@@ -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>
|
||||
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user