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

SpringBoot如何在使用MongoRepository时启用@Created

欢迎转载,但请标明出处和引用本文地址

1. 需要的依赖

对于 MongoDB,首先要确保你引入了以下依赖:Spring Boot Starter Data MongoDB

这是用于支持 MongoDB 的基础依赖,替代 spring-boot-starter-data-jpa

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

2. 启用 MongoDB 审计功能

与 JPA 类似,MongoDB 审计也需要启用。首先,在主类上启用 MongoDB 的审计功能。

在主类上添加 @EnableMongoAuditing

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.mongodb.config.EnableMongoAuditing;@SpringBootApplication
@EnableMongoAuditing // 重要
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}
}

3. 实体类上添加审计注解

与 JPA 类似,在 MongoDB 的实体类(通常是文档类)中添加 @CreatedBy@CreatedDate 注解。

import org.springframework.data.annotation.Id;
import org.springframework.data.annotation.CreatedBy;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedBy;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.mongodb.core.mapping.Document;import java.time.LocalDateTime;@Document  // 指定 MongoDB 中的集合名称
public class MyDocument {@Idprivate String id;@CreatedByprivate String createBy;@CreatedDateprivate LocalDateTime createdDate;@LastModifiedByprivate String lastModifiedBy;@LastModifiedDateprivate LocalDateTime lastModifiedDate;// getter 和 setter
}

4. 配置 AuditorAware Bean

MongoDB 审计同样需要一个 AuditorAware 实现,用来提供当前用户信息。以下是基于 Spring Security 的实现:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.domain.AuditorAware;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.UserDetails;import java.util.Optional;@Configuration
public class AuditConfig {@Beanpublic AuditorAware<String> auditorProvider() {return new AuditorAwareImpl();}public static class AuditorAwareImpl implements AuditorAware<String> {@Overridepublic Optional<String> getCurrentAuditor() {Authentication authentication = SecurityContextHolder.getContext().getAuthentication();if (authentication == null || !authentication.isAuthenticated()) {return Optional.empty();}return Optional.of(((UserDetails)authentication.getPrincipal()).getUsername()); // 返回当前用户名}}
}

5. 配置 MongoDB 连接

还需要在 application.properties(或 application.yml)文件中配置 MongoDB 连接。

5. 检查配置(重要)

如果你创建实体类时,例如上文所提到的MyDocument实体类时进行了如下操作

MyDocument myDocument = new MyDocument();
// 主动的添加id
myDocument.setId(ObjectId.get().toString());
// ... 其它的赋值操作// 存储数据库
MyDocumentMongoRepository.save(myDocument);// 样例代码,在csdn中编辑,有错误请指出

MongoRepository的相关代码进行添加审计注解时,会判断你这个类是不是新创建的类,如果时新创建的类,会执行注入

@CreatedBy @LastModifiedBy @CreatedDate @LastModifiedDate

标注的的参数,如果不是新创建的类则只会注入

@LastModifiedBy @LastModifiedDate

这两个更新标识的参数,

相关代码判断是否是新创建的类的条件是:判断@Id所标识的字段是否为 NULL(或者你没有使用@Id标识,但是有一个String或者ObjectId类型的id字段,会默认是id)

以上是实践所得出,如有出入可能是springboot版本不一致导致,请根据自己实际情况测试

    <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.8</version><relativePath/></parent>


http://www.mrgr.cn/news/29339.html

相关文章:

  • LeetCode题练习与总结:整数替换--397
  • 使用 Grafana api 查询 Datasource 数据
  • 【Linux】进程的概念
  • Linux中.NET读取excel组件,不会出现The type initializer for ‘Gdip‘ threw an exception异常
  • 719. 找出第 K 小的数对距离
  • 【LeetCode】【算法】11. 盛最多水的容器
  • 【Linux】探索文件I/O奥秘,解锁软硬链接与生成动静态库知识
  • C++学习, 文件
  • 5分钟部署Prometheus+Grafana批量监控Linux服务器
  • 性能测试的五大目标
  • 力扣300-最长递增子序列(Java详细题解)
  • 家居小程序有什么用?
  • CefSharp_Vue交互(Element UI)_WinFormWeb应用(4)--- 最小化最大化关闭窗体交互(含示例代码)
  • 7 种有助于压缩图像的最佳图像压缩工具
  • 推动公平学习与身份归一化的视网膜神经疾病数据集
  • 1035. 不相交的线
  • 光控资本:股票委托额是什么?股票委托额和股票成交量有什么区别?
  • C++学习, 接口
  • 【机器学习(七)】分类和回归任务-K-近邻 (KNN)算法-Sentosa_DSML社区版
  • 检查dll依赖运行情况:dependency walker(depends)下载链接
  • OpenFeign接口调用日志
  • WordPress建站钩子函数及使用
  • 2024/9/18 英语每日一段
  • 探索iPhone一键删除重复照片的方法
  • 【STM32系统】基于STM32设计的DAC输出电压与ADC检测电压系统(简易万用表,检测电压电流)——文末工程资料下载
  • 阻止冒泡事件