文章目录
- 一、Spring Data Envers是什么
- 二、集成步骤
- 1、添加依赖
- 2、然后在启动类上添加启用注解
- 3、创建一个审计实体
- 4、使用审计仓库
- 5、高级功能
- 三、总结
一、Spring Data Envers是什么
Spring Data Envers
是Spring Data
家族中专门负责数据审计的成员。它基于Hibernate Envers
,能够自动记录实体的变更历史,包括创建、修改和删除操作。简单来说,它就是给咱们的数据加上了一个"时光机"功能!
二、集成步骤
1、添加依赖
首先在Maven
项目中添加依赖:
<dependency><groupId>org.springframework.data</groupId> <artifactId>spring-data-envers</artifactId> <version>3.1.0</version></dependency>
2、然后在启动类上添加启用注解
@EnableJpaRepositories(repositoryFactoryBeanClass = EnversRevisionRepositoryFactoryBean.class)
@SpringBootApplication
public class AuditApplication {public static void main(String[] args) { SpringApplication.run(AuditApplication.class, args); }
}
3、创建一个审计实体
一个带审计功能的实体类:
@Entity
@Audited
public class User {@Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String username; private String email; // getter和setter方法省略}
解释一下这段代码:
@Audited
注解告诉Spring Data Envers
要对这个实体进行审计- 实体类的其他部分和普通JPA实体没什么区别
Envers
会自动创建一个对应的审计表User_AUD
4、使用审计仓库
接下来,创建一个支持审计的Repository
:
public interface UserRepository extends RevisionRepository<User, Long, Integer>, JpaRepository<User, Long> {}
有了这个仓库,我们就能这样查询历史记录:
@Service
public class UserService { @Autowired private UserRepository userRepository; public List<Revision<Integer, User>> getUserHistory(Long userId) { return userRepository.findRevisions(userId).getContent(); }public User getUserAtTime(Long userId, LocalDateTime dateTime) { return userRepository.findLastChangeRevision(userId, dateTime) .map(Revision::getEntity) .orElse(null); }
}
5、高级功能
Envers
还提供了一些很酷的高级功能:
- 选择性审计
@Entity
@Audited
public class Product { @Id private Long id; private String name; @NotAudited private String description; // 这个字段不会被审计
}
- 添加审计元数据
@Entity
@Audited
@EntityListeners(AuditingEntityListener.class)
public class Order { @LastModifiedBy private String modifiedBy; @LastModifiedDate private LocalDateTime modifiedDate;
}
三、总结
- 建议只对真正需要审计的实体启用
Envers
,这样可以避免不必要的性能开销 - 定期清理审计数据很重要,否则审计表可能会变得很大
- 可以使用自定义的
RevisionEntity
来存储更多审计信息