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:
- date when document has been created: @CreatedDate
- date when document has been updated last time: @LastModifiedDate
- user who has created document: @CreatedBy
- user who has done most recent update: @LastModifiedBy
- 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),当数据存在时会执行修改操作。
相关推荐
5. **Auditing**:Spring Data JPA 提供了审计功能,可以自动记录实体的创建时间和修改时间。这可以通过 `@CreatedDate` 和 `@LastModifiedDate` 注解实现。 6. **Integration with Spring MVC**:Spring Data JPA ...
6. ** auditing**:Spring Data JPA还提供了审计功能,通过`@CreationTimestamp`和`@LastModifiedDate`注解,可以自动记录实体创建和修改的时间。 7. **分页和排序**:`Pageable`接口提供了分页和排序的支持,可以...
8. **Auditing**: Spring Data也支持审计功能,可以跟踪和记录实体的创建时间、修改时间和修改人等信息。这可以通过`@CreatedBy`、`@LastModifiedBy`等注解实现。 9. **Event Handling**: Spring Data提供了事件...
5. **Auditing**:Spring Data JPA还提供了审计功能,可以自动记录实体的创建时间和修改时间等信息。 6. **Integration with Spring Transaction Management**:Spring Data JPA与Spring的事务管理无缝集成,可以...
Spring Data 的目标是简化数据库访问,并通过一致的编程模型和方法来增强现代数据存取技术,如关系型数据库、NoSQL 数据库(如 MongoDB)和其他持久层服务。 在 `spring-data-commons-1.5.0.RELEASE` 这个版本中,...
10. **Auditing**:SpringData还支持审计功能,可以自动记录数据的创建和修改时间,方便追踪历史变化。 在提供的源代码中,你可能看到各种Repository接口的实现,以及如何在实际项目中配置和使用它们。PPT则会通过...
6. **Auditing**:Spring Data JPA提供审计功能,可以自动记录实体的创建时间和修改时间,只需在实体类上添加相应的注解。 7. **事件监听**:通过实现`PreSaveEventListener`、`PostSaveEventListener`等接口,可以...
实体查询(Entity querying)部分深入讲解了如何利用Spring Data JPA进行高级实体查询,包括使用Specification(规范)来创建动态查询、使用事务性查询方法、锁定机制以及审计元数据(Auditing)的配置。 事务性...
文档内容覆盖了项目元数据(Project metadata)、依赖管理、Spring Boot集成、与Spring Framework的协同工作、核心概念、查询方法、...Spring Data扩展以及查询示例(Query by Example)和审计(Auditing)等核心知识点...
Spring Data JPA是Spring框架的一个模块,主要目的是简化Java企业级应用程序中数据访问层的开发。这个框架提供了对Java Persistence API (JPA) 的高级抽象,使得开发者可以更高效地与数据库进行交互,无需编写大量的...
Spring Data Commons 和 Spring Data JPA 是 Spring 框架中的两个关键模块,它们在 Java 应用开发中扮演着重要角色,特别是在数据访问层。这两个模块是基于 Java 的数据访问接口(JPA)来简化数据库操作,使得开发者...
Spring Data JPA还可以与其他Spring Data模块(如MongoDB、Cassandra等)配合使用,提供一致的编程模型和API。 这个"spring_data_jpa.jar"文件是Spring Data JPA的基础库,包含所有实现上述功能的类和接口。在实际...
7. **Auditing**:Spring Data JPA可以通过`@CreatedBy`, `@LastModifiedDate`, `@LastModifiedBy`等注解实现审计功能,自动记录实体创建人和最后修改的时间及用户。 8. **Pagination and Sorting**:Spring Data ...
- **审计信息**:Spring Data JPA可以集成 auditing support,自动记录创建时间和修改时间等信息。 总的来说,Spring Data JPA通过其强大的自动化和抽象能力,极大地提高了开发效率,减少了Java开发者在数据访问层...
### Spring Data JPA 参考文档知识点解析 #### 一、引言 Spring Data JPA 是 Spring 框架下的一个子项目,旨在简化 Java 应用程序中的数据访问层开发工作。它提供了丰富的功能来支持 JPA(Java Persistence API)...
7. **Auditing**: Spring Data JPA 支持审计功能,如 `@CreatedDate`, `@LastModifiedDate` 和 `@CreatedBy`, `@LastModifiedBy` 注解,可以自动记录实体的创建时间和修改信息。 8. **Repository Customization**: ...
5. **Auditing**:Spring Data JPA 提供了审计功能,可以自动记录实体的创建时间(@CreatedDate)和最后修改时间(@LastModifiedDate)。 四、实战应用 在 "spring-data-jpa-examples-master" 项目中,我们可以看到...
5. **Integration with Various Data Stores**:Spring Data Commons与多种数据存储系统兼容,包括关系数据库(JPA、Hibernate)、NoSQL数据库(MongoDB、Cassandra)、图数据库(Neo4j)等,使得跨平台和跨数据源的...
Spring Data JPA 的目标是通过让一些必须的工作变得更简单,来显著提高数据访问层的实现。作为一个开发者,你写你的仓库界面,包括自定义查询方法,而 Spring 给你提供自动实现。特性对建立基于Spring 和 JPA 的库的...