一、Auditing功能简介
先贴上Spring Data JPA的官方文档:https://docs.spring.io/spring-data/jpa/docs/2.0.9.RELEASE/reference/html/
项目中每条数据在创建修改的时候,我们都需要记录它创建人,创建时间,修改人,修改时间。如果每次新增的时候都去手动set,代码冗余且显得很不友好
spring data JPA 为我们提供了审计功能,英文是 Auditing
Auditing包括了四个注解,从名字就能看出它们的作用
@CreatedBy
创建人,在这个实体被insert的时候,会设置值
@LastModifiedBy
最后一次修改人,在这个实体每次被更新的时候,会设置值
@CreatedDate
创建时间,在这个实体被insert的时候,会设置值
@LastModifiedDate
最后一次修改时间,在这个实体每次被更新的时候,会设置值
二、如何启用
1.启动类上加@EnableJpaAuditing注解
2.实体类上加@EntityListeners(AuditingEntityListener.class)
3.属性上面使用对应注解
三、使用CreatedBy和LastModifiedBy时,JPA并不知道你的这个字段的值是什么,需要自己实现AuditorAware接口
import org.springframework.context.annotation.Configuration;
import org.springframework.data.domain.AuditorAware;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.UserDetails;
import java.util.Optional;
/**
* 使用@CreatedBy或@LastModifiedBy 则必须实现AuditorAware接口重写getCurrentAuditor方法
* 在定义使用@CreatedBy或@LastModifiedBy时,属性类型必须与AuditorAware接口的泛型类型相同
*/
@Configuration
public class SpringSecurityAuditorAware implements AuditorAware<String> {
@Override
public Optional<String> getCurrentAuditor() {
UserDetails userDetails;
try {
userDetails = (UserDetails)SecurityContextHolder.getContext().getAuthentication().getPrincipal();
return Optional.ofNullable(userDetails.getUsername());
}catch (Exception e){
return Optional.empty();
}
}