package com.wgcloud.util;
|
|
import com.mongodb.client.MongoClient;
|
import com.mongodb.client.MongoClients;
|
import com.mongodb.client.MongoIterable;
|
import com.wgcloud.entity.DbInfo;
|
import com.wgcloud.service.DbInfoService;
|
import com.wgcloud.service.LogInfoService;
|
import com.wgcloud.util.msg.WarnMailUtil;
|
import com.wgcloud.util.msg.WarnPools;
|
import com.wgcloud.util.staticvar.StaticKeys;
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
import org.springframework.stereotype.Component;
|
|
import javax.annotation.Resource;
|
|
/**
|
* @version v3.4
|
* @ClassName: MongoDbUtil
|
* @author: http://www.wgstart.com
|
* @date: 2022年11月10日
|
* @Description: MongoDb工具类
|
* @Copyright: 2019-2022 wgcloud. All rights reserved.
|
*/
|
@Component
|
public class MongoDbUtil {
|
|
private static final Logger logger = LoggerFactory.getLogger(MongoDbUtil.class);
|
|
@Resource
|
private LogInfoService logInfoService;
|
@Resource
|
private DbInfoService dbInfoService;
|
|
|
/**
|
* 连接mongodb
|
*
|
* @param dbInfo
|
* @return
|
*/
|
public void connectMongoDb(DbInfo dbInfo) throws Exception {
|
MongoClient mongoClient = null;
|
try {
|
dbInfo.setDbState(StaticKeys.ON_STATE);
|
//连接指定的MongoDB,只需要dbUrl
|
mongoClient = MongoClients.create(dbInfo.getDbUrl());
|
|
//打印
|
logger.info("mongoClient----------" + mongoClient);
|
|
if (null != mongoClient) {
|
MongoIterable<String> listDataBaseNames = mongoClient.listDatabaseNames();
|
for (String dbName : listDataBaseNames) {
|
logger.info("连接mongodb dbName-------" + dbName);
|
}
|
//关闭mongoClient
|
mongoClient.close();
|
mongoClient = null;
|
if (null != WarnPools.MEM_WARN_MAP && null != WarnPools.MEM_WARN_MAP.get(dbInfo.getId())) {
|
Runnable runnable = () -> {
|
WarnMailUtil.sendDbDown(dbInfo, false);
|
};
|
ThreadPoolUtil.executor.execute(runnable);
|
}
|
//只有数据源在线时候,才更新时间,连接失败就不更新时间
|
dbInfo.setCreateTime(DateUtil.getNowTime());
|
} else {
|
dbInfo.setDbState(StaticKeys.DOWN_STATE);
|
}
|
dbInfoService.updateById(dbInfo);
|
} catch (Exception e) {
|
dbInfo.setDbState(StaticKeys.DOWN_STATE);
|
logger.error("连接mongodb错误", e);
|
logInfoService.save("连接mongodb错误:" + dbInfo.getAliasName(), "数据库别名:" + dbInfo.getAliasName() + "," + e.toString(), StaticKeys.LOG_XTCZ);
|
dbInfoService.updateById(dbInfo);
|
Runnable runnable = () -> {
|
WarnMailUtil.sendDbDown(dbInfo, true);
|
};
|
ThreadPoolUtil.executor.execute(runnable);
|
//关闭mongoClient
|
if (null != mongoClient) {
|
mongoClient.close();
|
mongoClient = null;
|
}
|
}
|
}
|
|
|
}
|