作用
@CreatedDate
表示该字段为创建时间时间字段,在这个实体被insert的时候,会设置值
@CreatedBy
表示该字段为创建人,在这个实体被insert的时候,会设置值
@LastModifiedDate、@LastModifiedBy同理。
一、首先申明实体类,需要在类上加上注解@EntityListeners(AuditingEntityListener.class),同时在需要的字段上加上@CreatedDate、@CreatedBy、@LastModifiedDate、@LastModifiedBy等注解。
@Data
@Entity
@Table(name="mode")
@EntityListeners(AuditingEntityListener.class)
public class TransportMode {
/**
* 主键
*/
@Id
private Long id;
/**
* 创建时间
*/
@ApiModelProperty(notes = "创建时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@CreatedDate
private Date createTime;
/**
* 创建人名称
*/
@ApiModelProperty(notes = "创建人code")
@CreatedBy
private String createUserCode;
/**
* 最后修改时间
*/
@ApiModelProperty(notes = "最后修改时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@LastModifiedDate
private Date updateTime;
/**
* 最后修改人名称
*/
@ApiModelProperty(notes = "最后修改人code")
@LastModifiedBy
private String updateUserCode;
@Version
private Integer version;
二、编写AuditorAware
public class AuditorAwareImpl implements AuditorAware<String> {
@Override
public String getCurrentAuditor() {
return getUsername().orElse(mannualUsername.get());
}
}
可以写一个方法用于创建人是传过来的场合
public class AuditorAwareImpl implements AuditorAware<String> {
private static ThreadLocal<String> mannualUsername = new ThreadLocal<>();
public static void setMannualUsername(String username) {
mannualUsername.set(username);
}
public static void clearMannualUsername() {
mannualUsername.remove();
}
@Override
public String getCurrentAuditor() {
return getUsername().orElse(mannualUsername.get());
}
private Optional<String> getUsername() {
SecurityContext ctx = SecurityContextHolder.getContext();
if (Objects.isNull(ctx)) {
return Optional.empty();
}
if (Objects.isNull(ctx.getAuthentication())) {
return Optional.empty();
}
// 判断是否登陆
if (!ctx.getAuthentication().isAuthenticated()) {
return Optional.empty();
}
if (!(ctx.getAuthentication().getDetails() instanceof PscmUser)) {
return Optional.empty();
}
return Optional.of(((PscmUser) ctx.getAuthentication().getDetails()).getUsername());
}
}
三、在application启动类中加上注解@EnableJpaAuditing