Spring Data JPA教程:审计(一)

公众号,欢迎关注

在这里插入图片描述

提到审计,首先从脑海中蹦出的就是审计日志,记录了实体版本的修改信息。但是实现审计日志是个既耗时又复杂的任务,幸运的是,大部分时候我们都不需要

然而,还是有些经常碰到的问题:

  • 实体什么时候被创建和修改?
  • 谁创建和修改了这个实体?

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中

步骤如下:

  1. 创建一个AuditingDateTimeProvider类,实现DateTimeProvider接口
  2. 添加一个DateTimeService类型的字段,通过构造函数注入
  3. 实现getNow()方法,通过DateTimeService对象获取当前日期和时间,返回一个GregorianCalendar对象

AuditingDateTimeProvider实现如下:

import org.springframework.data.auditing.DateTimeProvider;
import java.util.Calendar;
import java.util.GregorianCalendar;

public class AuditingDateTimeProvider implements 
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值