`

Auditing entities in Spring Data MongoDB

阅读更多

Spring Data MongoDB 1.2.0 silently introduced new feature: support for basic auditing. Because you will not find too much about it in official reference in this post I will show what benefits does it bring, how to configure Spring for auditing and how to annotate your documents to make them auditable.Auditing let you declaratively tell Spring to store:

  1. date when document has been created: @CreatedDate
  2. date when document has been updated last time: @LastModifiedDate
  3. user who has created document: @CreatedBy
  4. user who has done most recent update: @LastModifiedBy
  5. current document version: @Version


Configuration

First of all Maven dependencies to latest Spring Data MongoDB and Spring Data Commons. Additionally in order to use date-related audit annotations we need to add joda-time to classpath.

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

 In order to enable auditing we need to add <mongo:auditing/> to Spring configuration. Currently there is no way to configure it through 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>

Usage

Configuration above provides us way for auditing that includes versioning and timestamps. Example document will look like: 

@Document
public class Item {
    @Id
    private String id;
    @Version
    private Long version;
    @CreatedDate
    private DateTime createdAt;
    @LastModifiedDate
    private DateTime lastModified;
    ...
}

Now you can save document using MongoTemplate or your repository and all annotated fields are automagically set.

As you have probably noticed I did not use here user related annotations @CreatedBy and @LastModifiedBy. In order to use them we need to tell Spring who is a current user.

First add user related fields to your audited class:

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

Then create your implementation of AuditorAware that will obtain current user (probably from session or Spring Security context – depends on your application):

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

Last thing is to tell Spring Data MongoDB about this auditor aware class by little modification in Mongo configuration:

 

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

 

update时好像不触发,save时会触发,此时可以使用mongoTemplate.save(S entity),当数据存在时会执行修改操作。

分享到:
评论

相关推荐

    Spring Data JPA中文文档[1.4.3]_springdatajpa_erlang_waitxpf_

    5. **Auditing**:Spring Data JPA 提供了审计功能,可以自动记录实体的创建时间和修改时间。这可以通过 `@CreatedDate` 和 `@LastModifiedDate` 注解实现。 6. **Integration with Spring MVC**:Spring Data JPA ...

    Spring Data JPA 笔记

    6. ** auditing**:Spring Data JPA还提供了审计功能,通过`@CreationTimestamp`和`@LastModifiedDate`注解,可以自动记录实体创建和修改的时间。 7. **分页和排序**:`Pageable`接口提供了分页和排序的支持,可以...

    spring data 示例

    8. **Auditing**: Spring Data也支持审计功能,可以跟踪和记录实体的创建时间、修改时间和修改人等信息。这可以通过`@CreatedBy`、`@LastModifiedBy`等注解实现。 9. **Event Handling**: Spring Data提供了事件...

    spring学习:spring data jpa

    5. **Auditing**:Spring Data JPA还提供了审计功能,可以自动记录实体的创建时间和修改时间等信息。 6. **Integration with Spring Transaction Management**:Spring Data JPA与Spring的事务管理无缝集成,可以...

    spring-data-commons1.50

    Spring Data 的目标是简化数据库访问,并通过一致的编程模型和方法来增强现代数据存取技术,如关系型数据库、NoSQL 数据库(如 MongoDB)和其他持久层服务。 在 `spring-data-commons-1.5.0.RELEASE` 这个版本中,...

    SpringData视频教程相关源代码和PPT

    10. **Auditing**:SpringData还支持审计功能,可以自动记录数据的创建和修改时间,方便追踪历史变化。 在提供的源代码中,你可能看到各种Repository接口的实现,以及如何在实际项目中配置和使用它们。PPT则会通过...

    Spring Data JPA中文文档[1.4.3]

    6. **Auditing**:Spring Data JPA提供审计功能,可以自动记录实体的创建时间和修改时间,只需在实体类上添加相应的注解。 7. **事件监听**:通过实现`PreSaveEventListener`、`PostSaveEventListener`等接口,可以...

    SpringData JPA 参考文档PDF 英文

    实体查询(Entity querying)部分深入讲解了如何利用Spring Data JPA进行高级实体查询,包括使用Specification(规范)来创建动态查询、使用事务性查询方法、锁定机制以及审计元数据(Auditing)的配置。 事务性...

    Spring Data Commons 2.0.x_2.0.0.M2

    文档内容覆盖了项目元数据(Project metadata)、依赖管理、Spring Boot集成、与Spring Framework的协同工作、核心概念、查询方法、...Spring Data扩展以及查询示例(Query by Example)和审计(Auditing)等核心知识点...

    spring data jpa中文文档

    Spring Data JPA是Spring框架的一个模块,主要目的是简化Java企业级应用程序中数据访问层的开发。这个框架提供了对Java Persistence API (JPA) 的高级抽象,使得开发者可以更高效地与数据库进行交互,无需编写大量的...

    spring-data-commons-1.7.2.RELEASEspring-data-jpa-1.5.2.RELEASE-java datajpa

    Spring Data Commons 和 Spring Data JPA 是 Spring 框架中的两个关键模块,它们在 Java 应用开发中扮演着重要角色,特别是在数据访问层。这两个模块是基于 Java 的数据访问接口(JPA)来简化数据库操作,使得开发者...

    spring data jpa.jar

    Spring Data JPA还可以与其他Spring Data模块(如MongoDB、Cassandra等)配合使用,提供一致的编程模型和API。 这个"spring_data_jpa.jar"文件是Spring Data JPA的基础库,包含所有实现上述功能的类和接口。在实际...

    SpringDataJpa.rar

    7. **Auditing**:Spring Data JPA可以通过`@CreatedBy`, `@LastModifiedDate`, `@LastModifiedBy`等注解实现审计功能,自动记录实体创建人和最后修改的时间及用户。 8. **Pagination and Sorting**:Spring Data ...

    Spring Data JPA初使用 .doc

    - **审计信息**:Spring Data JPA可以集成 auditing support,自动记录创建时间和修改时间等信息。 总的来说,Spring Data JPA通过其强大的自动化和抽象能力,极大地提高了开发效率,减少了Java开发者在数据访问层...

    spring-data-jpa-reference API

    ### Spring Data JPA 参考文档知识点解析 #### 一、引言 Spring Data JPA 是 Spring 框架下的一个子项目,旨在简化 Java 应用程序中的数据访问层开发工作。它提供了丰富的功能来支持 JPA(Java Persistence API)...

    Spring-data-jpa示例源码

    7. **Auditing**: Spring Data JPA 支持审计功能,如 `@CreatedDate`, `@LastModifiedDate` 和 `@CreatedBy`, `@LastModifiedBy` 注解,可以自动记录实体的创建时间和修改信息。 8. **Repository Customization**: ...

    spring-data-jpa-examples

    5. **Auditing**:Spring Data JPA 提供了审计功能,可以自动记录实体的创建时间(@CreatedDate)和最后修改时间(@LastModifiedDate)。 四、实战应用 在 "spring-data-jpa-examples-master" 项目中,我们可以看到...

    spring-data-commons-1.3.0.M1.zip

    5. **Integration with Various Data Stores**:Spring Data Commons与多种数据存储系统兼容,包括关系数据库(JPA、Hibernate)、NoSQL数据库(MongoDB、Cassandra)、图数据库(Neo4j)等,使得跨平台和跨数据源的...

    轻松实现基于JPA的库SpringDataJPA.zip

    Spring Data JPA 的目标是通过让一些必须的工作变得更简单,来显著提高数据访问层的实现。作为一个开发者,你写你的仓库界面,包括自定义查询方法,而 Spring 给你提供自动实现。特性对建立基于Spring 和 JPA 的库的...

Global site tag (gtag.js) - Google Analytics