在 Spring JPA 中,支持在字段或者方法上进行注解 @CreateDate、@CreatedBy、@LastModifiedDate、@LastModifiedBy
@CreateDate
表示该字段为创建时间时间字段,在这个实体被 insert 的时候,会设置默认值
@CreatedBy
表示该字段为创建人,在这个实体被insert的时候,会设置值。
@LastModifiedDate、@LastModifiedBy同理。
-
实体类上添加 @EntityListeners(AuditingEntityListener.class)
-
在需要的字段上加上 @CreatedDate、@CreatedBy、@LastModifiedDate、@LastModifiedBy 等注解。
-
在Xxx Application 启动类上添加 @EnableJpaAuditing
-
实现 AuditorAware 接口来返回你需要插入的值。重点
来看第4步,也是最重要的一步:
@Configuration
@Slf4j
public class UserAuditor implements AuditorAware<String> {
/**
* 获取当前创建或修改的用户
* @return
*/
@Override
public Optional<String> getCurrentAuditor() {
UserDetails user;
try {
user = (UserDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
return Optional.ofNullable(user.getUsername());
}catch (Exception e){
return Optional.empty();
}
}
}
关于方法 getCurrentAuditor 中获取用户名的操作可根据自己实际情况书写,比如上方我用到的是 Spring Secirity 的一种写法。