当前位置: 首页 > news >正文

windows上安装MongoDB,springboot整合MongoDB

上一篇文章已经通过在Ubuntu上安装MongoDB详细介绍了MongoDB的各种命令用法。

Ubuntu上安装、使用MongoDB详细教程icon-default.png?t=N7T8https://blog.csdn.net/heyl163_/article/details/133781878

这篇文章介绍一下在windows上安装MongoDB,并通过在springboot项目中使用MongoDB记录用户操作的日志~
 


目录

一、安装MongoDB

第一步:开始安装流程

第二步:勾选接受条款

第三步:选择安装路径

第四步:安装为本地服务

第五步:不安装Compass

最后一步:点击安装​编辑

二、springboot整合MongoDB

第一步:添加MongoDB的依赖

第二步:配置数据库信息

第三步:使用MongoTemplate

三、MongoDB实战

第一步:创建MongoDB实体类

第二步:创建AOP类

使用Navicat连接MongoDB


一、安装MongoDB

通过以下网盘链接下载MongoDB

链接:https://pan.baidu.com/s/19W4k3QURjw9YzVAqbPoQ2A?pwd=m4lh
提取码:m4lh
复制这段内容后打开百度网盘手机App,操作更方便哦

第一步:开始安装流程

双击下载下来的安装包,开始拉起安装流程

第二步:勾选接受条款

第三步:选择安装路径

第四步:安装为本地服务

第五步:不安装Compass

最后一步:点击安装

二、springboot整合MongoDB

第一步:添加MongoDB的依赖

springboot有整合了MongoDB的依赖,直接在项目的pom.xml中引入,版本和springboot版本一致

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>

第二步:配置数据库信息

spring:data:mongodb:port: 27017host: 127.0.0.1database: mhxysy

第三步:使用MongoTemplate

springboot测试类

package cn.edu.sgu.www.mhxysy;import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.mongodb.core.MongoTemplate;import java.util.List;/*** springboot测试类* @author heyunlin* @version 1.0*/
@SpringBootTest
class MhxysyTests {private final MongoTemplate mongoTemplate;@AutowiredMhxysyTests(MongoTemplate mongoTemplate) {this.mongoTemplate = mongoTemplate;}@Testvoid contextLoads() {boolean exists = mongoTemplate.collectionExists(MongoDBCollectionKeys.KEY_mhxysy);if (!exists) {mongoTemplate.createCollection(MongoDBCollectionKeys.KEY_mhxysy);} else {List<Object> list = mongoTemplate.findAll(Object.class);System.out.println(list);}}}

MongoDBCollectionKeys接口

package cn.edu.sgu.www.mhxysy.consts;/*** MongoDB集合名称常量接口* @author heyunlin* @version 1.0*/
public interface MongoDBCollectionKeys {/*** 集合后缀*/String suffix = "_operateLogs";/*** mhxysy服务的MongoDB集合名称*/String KEY_mhxysy = "mhxysy" + suffix;/*** authority服务的MongoDB集合名称*/String KEY_authority = "authority" + suffix;
}

三、MongoDB实战

使用AOP的环绕通知,把系统的访问日志保存到MongoDB中。

第一步:创建MongoDB实体类

package cn.edu.sgu.www.mhxysy.aop;import cn.edu.sgu.www.mhxysy.consts.MongoDBCollectionKeys;
import lombok.Data;
import org.springframework.data.mongodb.core.mapping.Document;import java.io.Serializable;/*** @author heyunlin* @version 1.0*/
@Data
@Document(collection = MongoDBCollectionKeys.KEY_mhxysy)
public class OperateLog implements Serializable {private static final long serialVersionUID = 18L;/*** 编号*/private String id;/*** 访问用户编号*/private String userId;/*** 访问用户名称*/private String username;/*** IP地址*/private String ip;/*** 操作url*/private String operateUrl;/*** 操作名称*/private String operateName;/*** 浏览器类型*/private String browserType;/*** 请求参数*/private String requestParams;/*** 操作时间*/private String operateTime;
}

第二步:创建AOP类

package cn.edu.sgu.www.mhxysy.aop;import cn.edu.sgu.www.mhxysy.config.property.SystemSettingsProperties;
import cn.edu.sgu.www.mhxysy.consts.IdentifierPrefixes;
import cn.edu.sgu.www.mhxysy.redis.RedisUtils;
import cn.edu.sgu.www.mhxysy.util.*;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.stereotype.Component;import javax.servlet.http.HttpServletRequest;
import java.util.Arrays;/*** @author heyunlin* @version 1.0*/
@Slf4j
@Aspect
@Component
public class LogAop {private final RedisUtils redisUtils;private final MongoTemplate mongoTemplate;private final SystemSettingsProperties systemSettingsProperties;@Autowiredpublic LogAop(RedisUtils redisUtils, MongoTemplate mongoTemplate, SystemSettingsProperties systemSettingsProperties) {this.redisUtils = redisUtils;this.mongoTemplate = mongoTemplate;this.systemSettingsProperties = systemSettingsProperties;}@Pointcut("execution(public * cn.edu.sgu.www.mhxysy.controller..*.*(..))")public void logAop() { }@Around("logAop()")public Object around(ProceedingJoinPoint joinPoint) throws Throwable {HttpServletRequest request = HttpUtils.getRequest();String requestURI = request.getRequestURI();// 开启日志才保存if (systemSettingsProperties.isEnableLog()) {Object[] args = joinPoint.getArgs();String requestArgs = null;if (args != null && args.length > 0) {requestArgs = Arrays.toString(joinPoint.getArgs());log.debug("操作资源参数:{} => {}", requestURI, requestArgs);}// 获取方法签名MethodSignature signature = (MethodSignature) joinPoint.getSignature();// 获取方法上的@ApiOperation注解ApiOperation annotation = signature.getMethod().getDeclaredAnnotation(ApiOperation.class);/** 保存日志到MongoDB*/OperateLog operateLog = new OperateLog();operateLog.setId(uuid());boolean isLogin = UserUtils.getSubject().isAuthenticated();if (isLogin) {operateLog.setUserId(UserUtils.getUserId());operateLog.setUsername(UserUtils.getLoginUsername());}operateLog.setIp(IpUtils.getIp());operateLog.setBrowserType(IpUtils.getBrowserType());operateLog.setOperateUrl(requestURI);operateLog.setRequestParams(requestArgs);operateLog.setOperateTime(StringUtils.toTimeString(TimeUtils.now()));operateLog.setOperateName(annotation.value());mongoTemplate.save(operateLog);//mongoTemplate.save(operateLog, MongoDBCollectionKeys.KEY_mhxysy);}return joinPoint.proceed();}private String uuid() {return IdentifierPrefixes.PREFIX_OPERATE_LOG + redisUtils.uuid();}}

SystemSettingsProperties是自己定义的配置类的映射类

package cn.edu.sgu.www.mhxysy.config.property;import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;/*** @author heyunlin* @version 1.0*/
@Data
@ApiModel
@Component
@ConfigurationProperties(prefix = "system.settings")
public class SystemSettingsProperties {/*** 百度地图的应用AK*/@ApiModelProperty(value = "应用AK")private String ak;/*** 百度地图sn校验的SK*/@ApiModelProperty(value = "校验SK")private String sk;/*** 时区ID*/@ApiModelProperty(value = "时区ID")private String zoneId;/*** 是否开启日志*/@ApiModelProperty(value = "是否开启日志")private boolean enableLog;/*** session过期时间*/@ApiModelProperty(value = "session过期时间")private Long sessionTimeout;/*** 是否使用真实地理位置*/@ApiModelProperty(value = "是否使用真实地理位置")private boolean useRealLocation;/*** 是否开启鉴权*/@ApiModelProperty(value = "是否开启鉴权")private boolean enableAuthorization;/*** 是否自动创建表*/@ApiModelProperty(value = "是否自动创建表")private boolean enableTableAutoCreation;/*** 是否开启actuator端点的鉴权*/@ApiModelProperty(value = "是否开启actuator端点的鉴权")private boolean enableActuatorAuthorization;
}

MongoTemplate有两个重载的save()方法

public class MongoTemplate implements MongoOperations, ApplicationContextAware, IndexOperationsProvider {@Overridepublic <T> T save(T objectToSave) {Assert.notNull(objectToSave, "Object to save must not be null!");return save(objectToSave, getCollectionName(ClassUtils.getUserClass(objectToSave)));}@Override@SuppressWarnings("unchecked")public <T> T save(T objectToSave, String collectionName) {Assert.notNull(objectToSave, "Object to save must not be null!");Assert.hasText(collectionName, "Collection name must not be null or empty!");AdaptibleEntity<T> source = operations.forEntity(objectToSave, mongoConverter.getConversionService());return source.isVersionedEntity() //? doSaveVersioned(source, collectionName) //: (T) doSave(collectionName, objectToSave, this.mongoConverter);}}

当MongoDB的实体类上通过@Document的collection属性指定了集合名称时,使用第一个单参数save()方法即可。

如果没有指定collection属性,则使用第二个save()方法指定将当前数据保存在哪个集合。

@Document(collection = MongoDBCollectionKeys.KEY_mhxysy)

 

使用Navicat连接MongoDB

推荐一款非常简单实用的数据库连接工具Navicat Premiumicon-default.png?t=N7T8https://blog.csdn.net/heyl163_/article/details/132111378

好了,文章就分享到这里了,看完不要忘了点赞+收藏哦~

springboot整合mongodb案例项目icon-default.png?t=N7T8https://gitee.com/muyu-chengfeng/springboot-mongodb.git

相关文章:

  • vllm 使用FP8运行模型
  • iMazing3软件安装包下载
  • 【C++】——继承(详解)
  • 如何选择靠谱的LabVIEW外包公司
  • Web前端浪漫源码:编织梦想与爱的交织乐章
  • np.array()按权重求平均值详解
  • vue2插槽
  • PayPal,stripe,square轮询系统你不知道的秘密
  • 三次样条曲线和三次多项式曲线
  • 用质量属性场景来描述可用性(2024年上半年软考系统架构师案例分析题)
  • CSS中,设置 0.5px 会生效吗
  • Flask基础2-Jinja2模板
  • git版本控制工具常用命令
  • 推荐一款WPF绘图插件OxyPlot
  • C语言 RTC时间(年月日时分秒) 和 时间戳 互相转换
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • ES学习笔记(12)--Symbol
  • Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • React as a UI Runtime(五、列表)
  • tensorflow学习笔记3——MNIST应用篇
  • 等保2.0 | 几维安全发布等保检测、等保加固专版 加速企业等保合规
  • 翻译 | 老司机带你秒懂内存管理 - 第一部(共三部)
  • 后端_ThinkPHP5
  • 京东美团研发面经
  • 来,膜拜下android roadmap,强大的执行力
  • 区块链共识机制优缺点对比都是什么
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 设计模式走一遍---观察者模式
  • 用Python写一份独特的元宵节祝福
  • 函数计算新功能-----支持C#函数
  • ​LeetCode解法汇总1276. 不浪费原料的汉堡制作方案
  • ​RecSys 2022 | 面向人岗匹配的双向选择偏好建模
  • ​sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块​
  • ​力扣解法汇总1802. 有界数组中指定下标处的最大值
  • # .NET Framework中使用命名管道进行进程间通信
  • # 透过事物看本质的能力怎么培养?
  • # 消息中间件 RocketMQ 高级功能和源码分析(七)
  • (13):Silverlight 2 数据与通信之WebRequest
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (2022 CVPR) Unbiased Teacher v2
  • (第三期)书生大模型实战营——InternVL(冷笑话大师)部署微调实践
  • (附源码)计算机毕业设计SSM教师教学质量评价系统
  • (免费领源码)python#django#mysql校园校园宿舍管理系统84831-计算机毕业设计项目选题推荐
  • (一)utf8mb4_general_ci 和 utf8mb4_unicode_ci 适用排序和比较规则场景
  • (已解决)vue+element-ui实现个人中心,仿照原神
  • (转) ns2/nam与nam实现相关的文件
  • .form文件_SSM框架文件上传篇
  • .NET 8.0 中有哪些新的变化?
  • .NET/C# 反射的的性能数据,以及高性能开发建议(反射获取 Attribute 和反射调用方法)
  • .NetCore项目nginx发布
  • .net开发日常笔记(持续更新)
  • .NET企业级应用架构设计系列之结尾篇
  • .NET设计模式(7):创建型模式专题总结(Creational Pattern)
  • .sdf和.msp文件读取