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.


    org.springframework.data
    spring-data-mongodb
    1.2.1.RELEASE

 

    org.springframework.data
    spring-data-commons
    1.5.1.RELEASE

 

    joda-time
    joda-time
    2.2

 In order to enable auditing we need to add  to Spring configuration. Currently there is no way to configure it through Java Config.






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 {
    @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:

 



 

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

你可能感兴趣的:(mongo,auditing,AuditorAware,审计)