Commit 89cbdfc7 张少辉

增加服务器备份功能

1 个父辈 f0858e97
......@@ -31,3 +31,4 @@ build/
### VS Code ###
.vscode/
!/src/main/java/com/neotel/smfcore/core/order/LiteOrderCache.java
package com.neotel.smfcore.common.base;
import com.neotel.smfcore.core.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;
......@@ -19,8 +21,15 @@ import java.util.regex.Pattern;
* Created by kangmor on 2015/9/14.
*/
public abstract class AbstractBaseDao implements IBaseDao {
@Autowired
@Qualifier("masterMongoTemplate")
private MongoTemplate mongoTemplate;
@Autowired
@Qualifier("backUpMongoTemplate")
private MongoTemplate backUpMongoTemplate;
private final static int DEFAULT_PAGE_SIZE = 10;
protected final transient Logger log = LogManager.getLogger(getClass());
......@@ -34,6 +43,15 @@ 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 +64,14 @@ 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 +130,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 +196,15 @@ 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 +212,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 +233,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 +250,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 +290,15 @@ public abstract class AbstractBaseDao implements IBaseDao {
}
}
try {
if (getBackUpMongoTemplate() != null) {
getBackUpMongoTemplate().save(sequence);
}
} catch (Exception e) {
log.error("{}备份库操作失败:{}", "getNextId", e.getMessage());
}
return sequence.getSeq().toString();
}
......@@ -230,6 +309,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.core.config.mongodb;
import com.mongodb.MongoClientSettings;
import com.mongodb.MongoCredential;
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.utils.StringUtils;
import com.neotel.smfcore.core.config.mongodb.bean.CustomMongoProperties;
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 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.Builder settingBuilder = MongoClientSettings.builder()
.applyToClusterSettings(builder ->
builder.hosts(serverAddressList)
.mode(clusterConnectionMode)
.requiredClusterType(clusterType)
).applyToConnectionPoolSettings(builder ->
builder.maxSize(mongoProperties.getMaxConSize())
.minSize(mongoProperties.getMinConsize())
);
if (StringUtils.isNotEmpty(mongoProperties.getUsername()) && StringUtils.isNotEmpty(mongoProperties.getPassword())){
MongoCredential credential = MongoCredential.createCredential(mongoProperties.getUsername(), mongoProperties.getDatabase(), mongoProperties.getPassword().toCharArray());
settingBuilder.credential(credential);
}
MongoClientSettings setting = settingBuilder.build();
MongoClient mongoClient = MongoClients.create(setting);
return new SimpleMongoClientDatabaseFactory(mongoClient, mongoProperties.getDatabase());
}
public static String getNoDatabase() {
return NO_DATABASE;
}
}
package com.neotel.smfcore.core.config.mongodb.bean;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class CustomMongoProperties {
private String host;
private Integer port;
private String database;
private String username;
private String password;
private Integer maxConSize = 100;
private Integer minConsize = 50;
}
\ No newline at end of file
......@@ -722,7 +722,7 @@ public class LizhenApi extends DefaultSmfApiListener {
paramMap.put("create_empno", StringUtils.isEmpty(task.getCreator()) ? "System" : task.getCreator());
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
paramMap.put("create_time", sdf.format(task.getCreateDate()));
paramMap.put("create_time", sdf.format(new Date()));
paramList.add(paramMap);
log.info("出库通知入参为:" + JSON.toJSONString(paramList) + "地址为:" + commonGIRecordUrl);
......
......@@ -14,6 +14,15 @@ spring:
host: localhost # 主机地址
port: 27017 # 端口
database: smf # 数据库
username: neotel
password: neotel
backup-mongodb:
host: 10.68.27.124 # 主机地址
port: 8001 # 端口
database: smf
username: neotel
password: neotel
#kafka配置
kafka:
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!