Spring Data MongoDB中的审核实体

Spring Data MongoDB 1.2.0静默引入了新功能:支持基本审核 。 因为您不会在本文的官方参考中找到太多有关它的信息,所以我将展示它带来的好处,如何配置Spring以进行审计以及如何对文档进行注释以使其可审计。 审核使您可以声明性地告诉Spring存储:

    • 文档创建的日期: @CreatedDate
    • 上次文档更新的日期: @LastModifiedDate
    • 创建文档的用户: @CreatedBy
    • 最近更新的用户: @LastModifiedBy
    • 当前文档版本: @Version

组态

首先,Maven依赖于最新的Spring Data MongoDB和Spring Data Commons。 另外,为了使用与日期相关的审计注释,我们需要在类路径中添加joda-time

<dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-mongodb</artifactId><version>1.2.1.RELEASE</version>
</dependency><dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-commons</artifactId><version>1.5.1.RELEASE</version>
</dependency><dependency><groupId>joda-time</groupId><artifactId>joda-time</artifactId><version>2.2</version>
</dependency>

为了启用审计,我们需要在Spring配置中添加<mongo:auditing /> 。 当前无法通过Java Config对其进行配置。

<mongo:auditing /><mongo:mongo id="mongo" /><bean class="org.springframework.data.mongodb.core.MongoTemplate"><constructor-arg name="mongo" ref="mongo" /><constructor-arg name="databaseName" value="blog-tests" />
</bean>

用法

上面的配置为我们提供了包括版本控制和时间戳在内的审计方法。 示例文档如下所示:

@Document
public class Item {@Idprivate String id;...    @Versionprivate Long version;@CreatedDateprivate DateTime createdAt;@LastModifiedDateprivate DateTime lastModified;...
}

现在,您可以使用MongoTemplate或存储库保存文档,并且所有带注释的字段均已自动设置。

您可能已经注意到,我在这里没有使用用户相关的注释@CreatedBy@LastModifiedBy 。 为了使用它们,我们需要告诉Spring谁是当前用户。

首先,将与用户相关的字段添加到审核的类中:

@CreatedBy
private String createdBy;@LastModifiedBy
private String lastModifiedBy;

然后创建您的AuditorAware实现,该实现将获取当前用户(可能从会话或Spring Security上下文中获取-取决于您的应用程序):

public class MyAppAuditor implements AuditorAware<String> {@Overridepublic String getCurrentAuditor() {// get your user name herereturn "John Doe";}
}

最后一件事是通过对Mongo配置进行少量修改来告诉Spring Data MongoDB有关此审计师的类:

<mongo:auditing auditor-aware-ref="auditor" />
<bean id="auditor" class="pl.maciejwalkowiak.blog.MyAppAuditor"/>

参考:来自JCG合作伙伴 Maciej Walkowiak的Spring Data MongoDB中的审计实体,来自Software Development Journey博客。

翻译自: https://www.javacodegeeks.com/2013/05/auditing-entities-in-spring-data-mongodb.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/368375.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Weex系列-项目工程

转载于:https://www.cnblogs.com/hacjy/p/8136460.html

MySQL索引效率对比_mysql下普通索引和唯一索引的效率对比

今天在我的虚拟机中布置了环境&#xff0c;测试抓图如下&#xff1a;抓的这几个都是第一次执行的&#xff0c;刷了几次后&#xff0c;取平均值&#xff0c;效率大致相同&#xff0c;而且如果在一个列上同时建唯一索引和普通索引的话&#xff0c;mysql会自动选择唯一索引。谷歌一…

css中的三种基本定位机制

css中的三种基本定位机制 a.普通文档流 b.定位&#xff1a;相对定位 绝对定位 固定定位 c.浮动 1.普通流中&#xff0c;元素位置由文档顺序和元素性质决定&#xff0c;块级元素从上到下依次排列&#xff0c;框之间的垂直距离由框的垂直margin值计算得到&#xff0c;行内元素在…

Mac再建管理员帐户

在Mac上添加用户没有成功, 把原来的管理员的用户群组修改后, 账户类型成为普通用户. 百度如何重新添加管理员: Mac上修改用户名后&#xff0c;无法用管理员账号和密码登录. 按照超过方法下去, 出现问题: 1, Command S之后, 命令行谈话一线转到登录. 重复几次后居然登录后进入命…

spring以及json,fastjson和jackson

&#xff08;一&#xff09; RestController 以及 RequestBody spring的这两个注解都需要使用对应的 message-converters 实现 pojo到字符串的转换&#xff0c; 需要配置实现了 GenericHttpMessageConverter 接口的实现类GenericHttpMessageConverter 父接口为HttpMessageConve…

JPA 2 | 动态查询与命名查询

JPA有自己的查询语言&#xff0c;称为JPQL。 JPQL与SQL非常相似&#xff0c;主要区别在于JPQL与应用程序中定义的实体一起使用&#xff0c;而SQL与数据库中定义的表和列名称一起使用。 在定义将对定义的Entity类执行CRUD操作的JPA查询时&#xff0c;JPA为我们提供了多种选择。 …

turtle 函数 方法_学python第十一节:turtle深入 了解

学python第十一节&#xff1a;深入分析turtleTurtle是一个直观有趣的图形绘制函数。这节课对turtle的以下几点进行补充&#xff1a;在蟒蛇绘制代码中提到过import 库引用保留字的函数&#xff0c;是补充python程序功能的方式&#xff0c;使用2种编写格式&#xff1a; 第一种引用…

intellij idea中解决java.lang.VerifyError: Expecting a stackmap frame at branch target的方法

【实习第三周&#xff0c;被生活逼成了全栈hhhh从开发写到测试】 报错如下&#xff1a; 经过查找各类资料博客&#xff0c;针对不同的情况有不同的解决办法&#xff1a;1. java源代码是用jdk1.6下开发的&#xff0c;后来环境上替换安装了jdk1.7编译运行。运行报错。我的错误不属…

ArrayList使用内存映射文件

介绍 内存中的计算由于负担得起的硬件而开始兴起&#xff0c;大多数数据保留在RAM中以满足延迟和吞吐量的目标&#xff0c;但是将数据保留在RAM中会增加垃圾收集器的开销&#xff0c;尤其是在您不预先分配的情况下。 因此&#xff0c;有效地我们需要一种无垃圾/无垃圾的方法来避…

JVM的内存区域划分(转载)

原文链接&#xff1a; http://www.cnblogs.com/dolphin0520/p/3613043.html JVM的内存区域划分 学过C语言的朋友都知道C编译器在划分内存区域的时候经常将管理的区域划分为数据段和代码段&#xff0c;数据段包括堆、栈以及静态数据区。那么在Java语言当中&#xff0c;内存又是如…

css 如何让背景图片拉伸填充避免重复显示

如何让背景图片拉伸填充&#xff0c;这个问题听起来似乎很简单。但是很遗憾的告诉大家。不是我们想的那么简单。 比如一个容器&#xff08;body,div,span&#xff09;中设定一个背景。这个背景的长宽值在css2.1之前是不能被修改的。 所以实际的结果是只能重复显示&#xff0c;所…

c语言以空格分割字符串_C语言strtok()函数:用指定的分隔符分解字符串

函数名: strtok头文件&#xff1a;函数原型: char *strtok(char *str1, const char *str2);功能&#xff1a; 用指定的分隔符分解字符串参数&#xff1a; char *str1 为要分解的字符串const char *str2 为分隔符字符串返回值&#xff1a; 返回下一个分割后的字符串指针&am…

微抖动,繁忙的等待和绑定CPU

性能分析新机器 当我在新机器上工作时&#xff0c;我想了解它的局限性。 在这篇文章中&#xff0c;我将研究机器的抖动以及忙于等待本周末构建的新PC的影响。 机器的规格很有趣&#xff0c;但不是发布目的。 永远不要少&#xff1a; i7-3970X六核&#xff0c;运行频率为4.5 GH…

函数的指定参数

def test(r,t,p) 形参 ret test(p等等,rere,tcsss) 实参&#xff0c;相等后位置上不用一一对应 默认值 def drive(name): temp name "开车" return temp ret drive("一个人") print(ret) ##应该输出为&#xff1a;一个人开车 def drice(p,name默认值…

Python快速搭建HTTP服务器

<wiz_tmp_tag id"wiz-table-range-border" contenteditable"false" style"display: none;"> 来自为知笔记(Wiz)转载于:https://www.cnblogs.com/linux-wang/p/8142848.html

mysql导入.sql文件及常用命令_MySQL导入.sql文件及常用命令

在MySQL Qurey Brower中直接导入*.sql脚本&#xff0c;是不能一次执行多条sql命令的&#xff0c;在mysql中执行sql文件的命令&#xff1a;mysql> source d:/myprogram/database/db.sql;另附mysql常用命令&#xff1a;一) 连接MYSQL&#xff1a;格式&#xff1a; mysql -…

浏览器如何生成URL

点击页面中的链接&#xff0c;浏览器会根据源码中相对URL路径作不同的处理&#xff1a; &#xff08;1&#xff09;有协议名称&#xff0c;但没有域名信息 对于这种形式的URL&#xff0c;它的协议&#xff0c;路径&#xff0c;查询字符串和片段ID都以它自身为准&#xff0c;但…

再见了古诺。 你好Drools工作台。

Drools 6.0发生了许多变化。 随着功能和功能的变化&#xff0c;我们对Guvnor github存储库进行了重组&#xff0c;以更好地反映我们的新架构。 历史上&#xff0c;Guvnor一直是Drools的Web应用程序。 它由Drools专用的编辑器&#xff0c;后端存储库和简化的资产管理系统组成。 …

接口聚合

1.设置pc ip 192.168.1.1 192.168.1.2 2.设置端口聚合&#xff08;两个交换机设置相同&#xff09; Switch(config)#inter range f 0/1-3 Switch(config-if-range)#channel-g 1 mode act Switch(config-if-range)#sw mode trunk Switch(config-if-range)#sw trunk allow vlan …

JAVA 框架-Spring

一.准备工作 1.下载spring工具插件&#xff0c;在STS官网找到与eclipse对应版本的下载链接地址&#xff0c;复制该地址打开eclipse里的Help菜单&#xff0c;选择Install new Software选项&#xff0c;将地址粘贴到work with输入框中&#xff0c;点击add按钮&#xff0c;此时Loc…