1、启动类开启注解
@EnableJpaAuditing
2、定义自动生成时间的格式
application.properties
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=GMT+8
3、实体类使用
需要在实体类上加上注解@EntityListeners(AuditingEntityListener.class),在需要的字段上加上@CreatedDate、@CreatedBy、@LastModifiedDate、@LastModifiedBy等注解。
import org.springframework.data.annotation.CreatedBy;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import javax.persistence.Entity;
import javax.persistence.EntityListeners;
import javax.persistence.Id;
import java.util.Date;
@Entity
@EntityListeners(AuditingEntityListener.class)
public class ApiOrder {
@Id
private String id;
private String apiId;
@CreatedBy
private String owner;
@CreatedDate
private Date createTime;
private Integer payCount;
private Boolean orderStatus;
private Boolean payStatus;
}
4、添加自动生成创建者的注解
在jpa.save方法被调用的时候,时间字段会自动设置并插入数据库,但是CreatedBy和LastModifiedBy并没有赋值,因为需要实现AuditorAware接口来返回你需要插入的
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.domain.AuditorAware;
import java.util.Optional;
/**
* 自动生成jpa中entity的@Createby作者
*/
@Configuration
public class JpaAuditorGenerateConfig implements AuditorAware<String> {
@Override
public Optional<String> getCurrentAuditor() {
SecurityContext ctx = SecurityContextHolder.getContext();
Object principal = ctx.getAuthentication().getPrincipal();
if (principal.getClass().isAssignableFrom(Long.class)) {
return Optional.of(principal) ;
} else {
return Optional.empty();
}
}
}