Commit ae1bbd3e zshaohui

1.增加双数据源接口 2.配置最大与最小连接数 mongodb

1 个父辈 a312a949
package com.neotel.smfcore.common.base;
import com.neotel.smfcore.common.config.mongodb.MongoDbConfig;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.data.domain.Pageable;
import org.springframework.data.mongodb.core.FindAndModifyOptions;
import org.springframework.data.mongodb.core.MongoTemplate;
......@@ -20,8 +22,13 @@ import java.util.regex.Pattern;
*/
public abstract class AbstractBaseDao implements IBaseDao {
@Autowired
@Qualifier("masterMongoTemplate")
private MongoTemplate mongoTemplate;
private final static int DEFAULT_PAGE_SIZE = 10;
@Autowired
@Qualifier("backUpMongoTemplate")
private MongoTemplate backUpMongoTemplate;
protected final transient Logger log = LogManager.getLogger(getClass());
@Override
......@@ -34,6 +41,13 @@ public abstract class AbstractBaseDao implements IBaseDao {
bean.setUpdateDate(new Date(System.currentTimeMillis()));
getMongoTemplate().save(bean);
log.debug("Bean " + getEntityClass() + " is saved with id " + bean.getId());
try {
if (getBackUpMongoTemplate() != null) {
getBackUpMongoTemplate().save(bean);
}
} catch (Exception e) {
log.error("{}备份库操作失败:{}", "save", e.getMessage());
}
return bean;
}
......@@ -46,6 +60,13 @@ public abstract class AbstractBaseDao implements IBaseDao {
t.setUpdateDate(new Date(System.currentTimeMillis()));
}
getMongoTemplate().insertAll(beanList);
try {
if (getBackUpMongoTemplate() != null) {
getBackUpMongoTemplate().insertAll(beanList);
}
} catch (Exception e) {
log.error("{}备份库操作失败:{}", "insertAll", e.getMessage());
}
}
return beanList;
}
......@@ -104,11 +125,25 @@ public abstract class AbstractBaseDao implements IBaseDao {
@Override
public void updateMulti(Query query, Update update){
getMongoTemplate().updateMulti(query,update,getEntityClass());
try {
if (getBackUpMongoTemplate() != null) {
getBackUpMongoTemplate().updateMulti(query, update, getEntityClass());
}
} catch (Exception e) {
log.error("{}备份库操作失败:{}", "updateMulti", e.getMessage());
}
}
@Override
public void updateFirst(Query query, Update update){
getMongoTemplate().updateFirst(query,update, getEntityClass());
try {
if (getBackUpMongoTemplate() != null) {
getBackUpMongoTemplate().updateFirst(query,update, getEntityClass());
}
} catch (Exception e) {
log.error("{}备份库操作失败:{}", "updateFirst", e.getMessage());
}
}
@Override
......@@ -156,6 +191,13 @@ public abstract class AbstractBaseDao implements IBaseDao {
T t = findOneById(id);
if (t != null) {
getMongoTemplate().remove(t);
try {
if (getBackUpMongoTemplate() != null) {
getBackUpMongoTemplate().remove(t);
}
} catch (Exception e) {
log.error("{}备份库操作失败:{}", "removeOneById", e.getMessage());
}
}
}
......@@ -163,6 +205,13 @@ public abstract class AbstractBaseDao implements IBaseDao {
public<T extends BasePo> void removeOne(Object bean) {
if (bean != null) {
getMongoTemplate().remove(bean);
try {
if (getBackUpMongoTemplate() != null) {
getBackUpMongoTemplate().remove(bean);
}
} catch (Exception e) {
log.error("{}备份库操作失败:{}", "removeOne", e.getMessage());
}
}
}
......@@ -177,6 +226,13 @@ public abstract class AbstractBaseDao implements IBaseDao {
if (list != null && list.size() > 0) {
for (T t : list) {
getMongoTemplate().remove(t);
try {
if (getBackUpMongoTemplate() != null) {
getBackUpMongoTemplate().remove(t);
}
} catch (Exception e) {
log.error("{}备份库操作失败:{}", "removeByQuery", e.getMessage());
}
}
}
}
......@@ -187,6 +243,13 @@ public abstract class AbstractBaseDao implements IBaseDao {
if(list != null && list.size() > 0){
for(T t : list){
getMongoTemplate().remove(t);
try {
if (getBackUpMongoTemplate() != null) {
getBackUpMongoTemplate().remove(t);
}
} catch (Exception e) {
log.error("{}备份库操作失败:{}", "removeAll", e.getMessage());
}
}
}
}
......@@ -220,6 +283,13 @@ public abstract class AbstractBaseDao implements IBaseDao {
}
}
try {
if (getBackUpMongoTemplate() != null) {
getBackUpMongoTemplate().insert(sequence);
}
} catch (Exception e) {
log.error("{}备份库操作失败:{}", "getNextId", e.getMessage());
}
return sequence.getSeq().toString();
}
......@@ -230,6 +300,18 @@ public abstract class AbstractBaseDao implements IBaseDao {
return mongoTemplate;
}
/**
* 如果没有配置数据源,则返回为空
* @return
*/
public MongoTemplate getBackUpMongoTemplate() {
String databaseName = backUpMongoTemplate.getDb().getName();
if (MongoDbConfig.getNoDatabase().equals(databaseName)) {
return null;
}
return backUpMongoTemplate;
}
public void setMongoTemplate(MongoTemplate mongoTemplate) {
this.mongoTemplate = mongoTemplate;
}
......
package com.neotel.smfcore.common.config.mongodb;
import com.mongodb.MongoClientSettings;
import com.mongodb.ServerAddress;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import com.mongodb.connection.ClusterConnectionMode;
import com.mongodb.connection.ClusterType;
import com.neotel.smfcore.common.config.mongodb.bean.CustomMongoProperties;
import com.neotel.smfcore.common.utils.StringUtils;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.data.mongodb.MongoDatabaseFactory;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.SimpleMongoClientDatabaseFactory;
import org.springframework.data.mongodb.core.SimpleMongoClientDbFactory;
import java.util.ArrayList;
import java.util.List;
@Configuration
public class MongoDbConfig {
private static final String NO_HOST = "none";
private static final Integer NO_PORT = 0;
private static final String NO_DATABASE = "noConfigDatabase";
@Primary
@Bean("masterMongoProperties")
@ConfigurationProperties(prefix = "spring.data.mongodb")
protected CustomMongoProperties masterMongoProperties() {
return new CustomMongoProperties();
}
@Bean("backUpMongoProperties")
@ConfigurationProperties(prefix = "spring.data.backup-mongodb")
protected CustomMongoProperties backUpMongoProperties() {
return new CustomMongoProperties();
}
@Primary
@Bean(name = "masterMongoTemplate")
public MongoTemplate masterMongoTemplate(@Qualifier("masterMongoProperties") CustomMongoProperties mongoProperties) {
return new MongoTemplate(mongoDbFactory(mongoProperties));
}
@Bean(name = "backUpMongoTemplate")
public MongoTemplate backUpMongoTemplate(@Qualifier("backUpMongoProperties") CustomMongoProperties mongoProperties) {
//如果没有配置的话,则模板返回为空
if (StringUtils.isBlank(mongoProperties.getHost())) {
mongoProperties.setHost(NO_HOST);
mongoProperties.setPort(NO_PORT);
mongoProperties.setDatabase(NO_DATABASE);
}
return new MongoTemplate(mongoDbFactory(mongoProperties));
}
private MongoDatabaseFactory mongoDbFactory(CustomMongoProperties mongoProperties) {
ClusterConnectionMode clusterConnectionMode;
ClusterType clusterType;
List<ServerAddress> serverAddressList = new ArrayList<>();
clusterConnectionMode = ClusterConnectionMode.SINGLE;
clusterType = ClusterType.STANDALONE;
ServerAddress serverAddress = new ServerAddress(mongoProperties.getHost(), mongoProperties.getPort());
serverAddressList.add(serverAddress);
MongoClientSettings setting = MongoClientSettings.builder()
.applyToClusterSettings(builder ->
builder.hosts(serverAddressList)
.mode(clusterConnectionMode)
.requiredClusterType(clusterType)
).applyToConnectionPoolSettings(builder ->
builder.maxSize(mongoProperties.getMaxConSize())
.minSize(mongoProperties.getMinConsize())
).build();
MongoClient mongoClient = MongoClients.create(setting);
return new SimpleMongoClientDatabaseFactory(mongoClient, mongoProperties.getDatabase());
}
public static String getNoDatabase() {
return NO_DATABASE;
}
}
package com.neotel.smfcore.common.config.mongodb.bean;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class CustomMongoProperties {
private String host;
private Integer port;
private String database;
private Integer maxConSize = 100;
private Integer minConsize = 50;
}
......@@ -26,6 +26,16 @@ spring:
host: localhost # 主机地址
port: 27017 # 端口
database: smf # 数据库
maxConSize: 200
minConsize: 100
#备份数据库配置
#backup-mongodb:
#host: localhost
#port: 27017
#database: backup-smf
#maxConSize: 100
#minConsize: 50
messages:
encoding: utf-8
main:
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!