介绍

在Spring Boot开发的动态世界中,确保数据完整性和跟踪变化是至关重要的。实现这一目标的一个强大工具是@Audited注解。本文深入探讨了该注解的复杂性、其目的、实现步骤以及如何利用其功能进行有效的实体审计。

理解@Audited

Spring Boot中的@Audited注解用于审计实体,提供对数据随时间变化的详细记录。这在需要跟踪修改、用户操作或合规要求的情况下非常有价值。

实现步骤

1. 依赖项:要包含@Audited,需要在项目中添加spring-data-envers依赖。确保你的pom.xml或build.gradle反映这一添加。

<!-- Maven Dependency -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-envers</artifactId>
</dependency>

spring-boot-starter-data-jpa依赖包含了使用Spring Data JPA进行数据访问所需的组件。然而,如果你特别想在Spring Boot中使用@Audited注解启用实体审计,还需要包含hibernate-envers依赖。该依赖添加了对Hibernate Envers的支持,这是负责实体版本控制和审计的工具。

2. 实体配置:将@Audited注解应用于你想要审计的实体类。

import org.hibernate.envers.Audited;
@Entity
@Audited
public class YourEntity {
// 你的实体字段和方法
}

3. application.yml配置:确保你的application.yml或application.properties包含Hibernate Envers所需的配置。

spring:
data:
jpa:
repositories:
enabled: true
auditing:
enabled: true

4. 审计表字段:Hibernate Envers生成的审计表通常包括REV(修订号)、REVTYPE(修订类型)、AUDIT_TIMESTAMP(审计时间戳)等字段。这些字段共同存储对审计实体的历史更改。

Spring Boot会自动创建审计表(例如,‘YourEntity_AUD’)以存储元数据。

探索审计表中的字段:

– REV:修订号(递增)

– REVTYPE:修订类型(插入、更新、删除)

– AUDITEDFIELD:审计字段值

– MODIFIEDBY:进行更改的用户

– MODIFIEDDATE:修改日期和时间

5. 检索审计数据:使用Spring Data JPA仓库查询审计历史。

import org.springframework.data.repository.history.RevisionRepository;
import org.springframework.data.history.Revision;
import java.util.List;
public interface YourEntityAuditRepository extends RevisionRepository<YourEntity, Long, Integer> {
List<Revision<Integer, YourEntity>> findRevisionsById(Long entityId);
}

在这个例子中:

– YourEntityAuditRepository扩展了RevisionRepository,这是一个处理修订的Spring Data JPA接口。

– findRevisionsById方法允许你检索具有指定ID的实体的所有修订。

然后,你可以在服务或控制器中使用此仓库查询审计历史:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class AuditService { private final YourEntityAuditRepository entityAuditRepository;
@Autowired
public AuditService(YourEntityAuditRepository entityAuditRepository) {
this.entityAuditRepository = entityAuditRepository;
}
public List<Revision<Integer, YourEntity>> getEntityRevisions(Long entityId) {
return entityAuditRepository.findRevisionsById(entityId);
}
}

另一个例子

使用Hibernate Envers查询具有给定ID的特定实体的审计历史

List<YourEntity_AUD> revisions = auditReader.findRevisions(YourEntity.class, entityld);

– auditReader:一个AuditReader实例,由Hibernate Envers提供。它允许你与实体的审计历史进行交互。

– findRevisions:Hibernate Envers提供的方法,用于检索具有指定ID的给定实体的所有修订。

– YourEntity.class:你想要检索审计历史的实体类。

– entityId:你想要获取修订的实体的特定ID。

– List<YourEntity_AUD>:结果是一个审计实体(YourEntity_AUD)的列表,列表中的每个条目代表实体的一个修订。

在Hibernate Envers中,当你为一个实体启用审计时,它会生成一个带有“_AUD”后缀的相应审计实体(默认情况下)。这个审计实体会跟踪原始实体随时间变化的所有更改。

因此,这行代码本质上是在查询具有给定ID的实体的所有修订的审计历史,并将结果存储在一个审计实体列表中。然后,可以使用此列表分析或显示实体在不同修订中的更改。

欢迎关注我的公众号:程序猿DD。第一时间了解前沿行业消息、分享深度技术干货、获取优质学习资源

使用 @Audited 增强Spring Boot 应用程序的数据审计能力的更多相关文章

  1. 使用Maven插件构建Spring Boot应用程序镜像

    使用Maven插件构建Spring Boot应用程序的Docker镜像. 环境准备 1.Linux系统 2.安装JDK,Maven 3.安装Docker 应用实践 1.在应用程序根目录下添加Docke ...

  2. docker 部署Spring Boot:Docker化Spring Boot应用程序

    第一章 1.创建项目存放目录 mkdir /root/sproot -p 2.准备好Spring Boot应用程序 jar 包 testrest.jar 第二章 1. 安装docker 在所有节点执行 ...

  3. SpringBoot之二:部署Spring Boot应用程序方式

    衡量多种部署方式 Spring Boot应用程序有多种构建和运行方式,其中一些你已经使用过了. 在IDE中运行应用程序(涉及Spring ToolSuite或IntelliJ IDEA). 使用Mav ...

  4. Spring Boot入门程序-STS

    使用Eclipse EE 中的 Spring Tool插件,完成 第一个Spring Boot应用程序的创建. 一.安装Spirng Tool插件 在 Eclipse EE Oxygen版本,安装“S ...

  5. Spring Boot入门程序

    创建第一个Spring Boot的入门程序. 带你一步一步的,搭建第一个Spring Boot 的入门程序,并成功运行,通过实践过程,初步认识和了解如何使用Spring Boot 创建应用程序. 一. ...

  6. 将Spring Boot应用程序迁移到Java9:兼容性

    将 Spring Boot 应用程序迁移到 Java 9:兼容性 随着 Java 9 的到来,关于如何迁移应用程序以使用模块系统有很多的讨论.遗憾的是,大多数文章的焦点都集中于简单的 Hello Wo ...

  7. 如何为Spring Boot应用程序配置端口

    [转]https://www.javaroad.cn/questions/11162 1 个月前 1.1通过属性文件更新 . /src/main/resources/application.prope ...

  8. 阿里P7级教你如何在Spring Boot应用程序中使用Redis

    在Spring Boot应用程序中使用Redis缓存的步骤: 1.要获得Redis连接,我们可以使用Lettuce或Jedis客户端库,Spring Boot 2.0启动程序spring-boot-s ...

  9. 峰哥说技术:02-第一个Spring Boot应用程序

    Spring Boot深度课程系列 峰哥说技术—2020庚子年重磅推出.战胜病毒.我们在行动 02第一个Spring Boot应用程序 1.版本要求 集成开发环境:IntelliJ IDEA 2017 ...

  10. 将Spring Boot应用程序注册成为系统服务

    文章目录 前期准备 打包成可执行jar包 注册成为liunx服务 System V Init Systemd Upstart 在Windows中安装 Windows Service Wrapper J ...

随机推荐

  1. 拼凑一个ABP VNext管理后台拼凑一个ABP VNext管理后台

    介绍# 本项目前后端分离,后端采用ABP VNext框架,前端Vue.项目地址: https://github.com/pojianbing/AuthCenter 目前包含的模块有: 身份认证管理 I ...

  2. containerd 源码分析:创建 container(一)

    0. 前言 Kubernetes:kubelet 源码分析之 pod 创建流程 介绍了 kubelet 创建 pod 的流程,containerd 源码分析:kubelet 和 containerd ...

  3. 异步长传文件插件 jquery validate 前端验证

    异步文件上传插件:http://fex.baidu.com/webuploader/getting-started.html html5 FormData 可以实现无刷新上传  有空了解 FileRe ...

  4. The remote name could not be resolved

    HTTP The remote name could not be resolved HTTP Status:NameResolutionFailure

  5. 什么是Web3.0,和区块链又有什么关系?

    又是一个莫名其妙的词语的新起-.- 我大致归纳为以下几个点 什么是web3.0 Web 3.0(Web3)是下一代互联网的发展方向,旨在创建一个更加去中心化.用户控制和数据保护的网络环境.与之前的We ...

  6. spring的问题-能耗、学习曲线

    说实话,在过去将近20年中,spring对于it行业的帮助还是很大的,尤其是信息系统建设方面. 但在我看来,spring的发展也许进入了一个困局. 开始的时候,spring的确是一个还是算小巧的工具, ...

  7. 大数据面试吹牛草稿V2.0

    面试吹牛之前先打个草稿! 各位面试官好! 我叫 xxx,毕业于 xxx,之前在 xxx 公司待了 1 年多,期间⼀直从事的是 IT 行业,刚开始的时候做的是 Java 开发后来转岗到大数据方向做大数据 ...

  8. Nacos + Gateway网关搭建微服务

    文章所有代码GtiHub:https://github.com/Tom-shushu/work-study 里面的gateway-server和server1项目 1.Docker 部署 Nacos ...

  9. 使用 nginx 共享文件

    1. 安装nginx 2. 在nginx的配置文件的server部分加上如下的配置: location /shared/ { autoindex on; autoindex_exact_size on ...

  10. python重拾第五天-常用模块学习

    本节大纲: 模块介绍 time &datetime模块 random os sys shutil json & picle shelve xml处理 yaml处理 configpars ...