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 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; } } } }