公众号,欢迎关注

提到审计,首先从脑海中蹦出的就是审计日志,记录了实体版本的修改信息。但是实现审计日志是个既耗时又复杂的任务,幸运的是,大部分时候我们都不需要
然而,还是有些经常碰到的问题:
- 实体什么时候被创建和修改?
- 谁创建和修改了这个实体?
Spring Data JPA的审计功能可以帮助我们解决这两个问题,下面我们介绍一下怎样通过Spring Data JPA提供的审计功能记录实体的创建和修改时间
一开始,我们需要先写一个返回当前日期和时间的服务,定义一个DateTimeService接口
为什么使用接口而不是类实现这个服务呢,原因如下:
- 我们想创建两个不同的实现类
- 第一个实现返回当前的日期和时间
- 第二个实现用于测试,每次返回相同的日期和时间
- 如果是个产品应用,其他组件也会通过接口进行调用
DateTimeService接口的声明只有一个方法:
getCurrentDateAndTime(),该方法返回一个ZonedDateTime对象
DateTimeService接口代码如下:
import java.time.ZonedDateTime;
public interface DateTimeService {
ZonedDateTime getCurrentDateAndTime();
}
CurrentTimeDateTimeService实现了DateTimeService接口,getCurrentDateAndTime()的实现只是简单的返回了当前时间
CurrentTimeDateTimeService实现如下:
import java.time.ZonedDateTime;
public class CurrentTimeDateTimeService implements DateTimeService {
@Override
public ZonedDateTime getCurrentDateAndTime() {
return ZonedDateTime.now();
}
}
下面我们看看怎样将我们写的service与Spring Data JPA进行集成
Spring Data JPA使用DateTimeProvider接口获取日期和时间,所以我们只要实现这个接口就可以将我们的service集成到Spring中
步骤如下:
- 创建一个
AuditingDateTimeProvider类,实现DateTimeProvider接口 - 添加一个
DateTimeService类型的字段,通过构造函数注入 - 实现
getNow()方法,通过DateTimeService对象获取当前日期和时间,返回一个GregorianCalendar对象
AuditingDateTimeProvider实现如下:
import org.springframework.data.auditing.DateTimeProvider;
import java.util.Calendar;
import java.util.GregorianCalendar;
public class AuditingDateTimeProvider implements DateTimeProvider

本文介绍了如何使用Spring Data JPA的审计功能记录实体的创建和修改时间。通过创建返回日期时间的服务接口,实现与Spring Data JPA的集成,以及在实体类中配置审计注解,可以轻松实现审计日志功能。
最低0.47元/天 解锁文章
510

被折叠的 条评论
为什么被折叠?



