實體類:
在類上加上註解@EntityListeners(AuditingEntityListener.class)
相關屬性上使用@CreatedDate、@CreatedBy、@LastModifiedDate、@LastModifiedBy註解
@Data
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
@JsonIgnoreProperties(value={"hibernateLazyInitializer","handler","fieldHandler"})
public abstract class BaseEntity implements Serializable{
private static final long serialVersionUID = 1L;
@Id
@TableId
@ApiModelProperty(value = "唯一標識")
private String id = String.valueOf(SnowFlakeUtil.getFlowIdInstance().nextId());
@ApiModelProperty(value = "創建者")
@CreatedBy
private String createBy;
@CreatedDate
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "創建時間")
private Date createTime;
@ApiModelProperty(value = "更新者")
@LastModifiedBy
private String updateBy;
@LastModifiedDate
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "更新時間")
private Date updateTime;
@ApiModelProperty(value = "刪除標誌 默認0")
private Integer delFlag = CommonConstant.STATUS_NORMAL;
}
啓動類:
啓動類使用@EnableJpaAuditing啓用JPA審計,此時時間字段已經可以賦值。
// 啓用JPA審計
@EnableJpaAuditing
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication .class, args);
}
}
實現AuditorAware
接口:
自定義配置類實現AuditorAware
接口,重寫getCurrentAuditor方法,給CreatedBy和LastModifiedBy賦值。本代碼使用的是Security安全框架,所以通過Security即可獲取用戶名。
@Configuration
public class UserAuditor implements AuditorAware<String> {
@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();
}
}
}