• 使用 Spring Boot 设置 Hibernate Envers


    Hibernate Envers是一个实现持久实体的审核和版本控制的模块。审计和版本控制是构建生产级Spring 启动微服务的关键组件。Hibernate Envers与Spring Boot无缝集成以实现相同的目标。

    在这篇文章中,我们将在我们的Spring Boot Starter应用程序中集成Hibernate Envers。

    数据库审核对于合规性非常重要。此外,很多时候,必须分析生产问题。对于这样的分析,审计数据非常有用。

    Hibernate Envers POM Dependency

    将 Hibernate Envers 与 Spring Boot 一起使用的第一步是将依赖项包含在 POM 文件中。

    
    			org.hibernate
    			hibernate-envers
    			5.3.1.Final
    
    

    为休眠实体启用审核

    下一步是简单地为所需实体启用审核。这可以通过使用@Audited注释轻松完成。

    @Entity
    @Table(name = "vehicle")
    @Audited
    public class Vehicle {
    
        @Id
        private UUID id;
    
        private String vehicleIdentityNumber;
    
        private String make;
    
        private String model;
    
        private String status;
    
        public Vehicle() {
        }
    
        public UUID getId() {
            return id;
        }
    
        public void setId(UUID id) {
            this.id = id;
        }
    
        public String getVehicleIdentityNumber() {
            return vehicleIdentityNumber;
        }
    
        public void setVehicleIdentityNumber(String vehicleIdentityNumber) {
            this.vehicleIdentityNumber = vehicleIdentityNumber;
        }
    
        public String getMake() {
            return make;
        }
    
        public void setMake(String make) {
            this.make = make;
        }
    
        public String getModel() {
            return model;
        }
    
        public void setModel(String model) {
            this.model = model;
        }
    
        public String getStatus() {
            return status;
        }
    
        public void setStatus(String status) {
            this.status = status;
        }
    
        @Override
        public String toString() {
            return "Vehicle{" +
                    "id=" + id +
                    ", vehicleIdentityNumber='" + vehicleIdentityNumber + '\'' +
                    ", make='" + make + '\'' +
                    ", model='" + model + '\'' +
                    ", status='" + status + '\'' +
                    '}';
        }
    }
    

    只需对实体类进行注释,Envers Hibernate就会为审计注册此类类。换句话说,这意味着除了主表之外,还将为此类实体创建审计表。

    但是,要创建实际表,最直接的方法是使用休眠设置。这是通过使用hibernate.hbm2ddl.auto选项并将其设置为创建

    此设置在应用程序属性文件中完成。

    spring.datasource.url=jdbc:h2:mem:mytestdb
    spring.datasource.driverClassName=org.h2.Driver
    spring.datasource.username=sa
    spring.datasource.password=
    spring.jpa.hibernate.ddl-auto=create

    请注意,休眠自动创建选项对于生产不安全。

    休眠者在行动

    我们可以通过启动 Spring Boot 应用程序来查看休眠审核日志记录的运行情况。应用程序启动后,我们可以访问h2控制台

    这到底是怎么回事呢?

    如您所见,我们有预期的车辆表。除此之外,我们还有一个名为VEHICLE_AUD的新表。审核表包含原始表中的所有字段。

    但是,还添加了两个新字段。首先是 REVTYPE 字段。其中包含“0”表示添加,“1”表示更新,“2”表示删除。另一个字段是 REV 字段。

    生成另一个表。它被称为REVINFO。它包含两个字段REVREVTSTMPVEHICLE_AUD中的 REV字段基本上是REVINFO表中REV字段的外键REVINFO表跟踪每个事务。

    休眠者在行动

    为了测试Hibernate Envers和审计日志记录,我们可以使用我们的载具端点触发一些事务。

    当我们使用 POST 操作之类的操作创建新记录,然后使用 PUT 操作对其进行更新时,我们会在 VEHICLE_AUD 表中得到两条记录。

    如您所见,ID 是c7a2ac1750fd4e12877efc76b3743646。

    有两条记录具有此 ID。一个的 REVTYPE 为 0(创建),而另一个的 REVTYPE 为 1(更新)。

    REVINFO表跟踪所有修订。如果您仔细观察,VEHICLE_AUD表中的REV字段是REVINFO表中REV字段的外键。

    结论

    Hibernate Envers是一个非常强大的解决方案,可以满足Spring应用程序中的审计日志记录需求。

    它也与Spring Boot无缝契合。这允许为Spring 引导微服务启用休眠审核日志记录。只需使用注释并将依赖项包含在 POM 文件中,即可轻松设置它。

    这篇文章的代码现在可以在Github上找到。

  • 相关阅读:
    [zookeeper]介绍|特点|节点的类型|服务器几个节点|选举机制|监听原理|常用命令
    全志V853平台Camera模块开发框架详解
    Java反编译工具 JD-GUI安装使用
    K8s - Pod配置容器
    React报错之Property 'X' does not exist on type 'HTMLElement'
    快速上手Linux核心命令(九):文件备份与压缩
    客流人数管理新趋势:景区客流采集分析系统的功能特点
    vue2+echarts:使用后台传输的json数据去动态渲染echarts图表
    leetcode:507. 完美数(python3解法)
    关于椭球的一点形象的解说
  • 原文地址:https://blog.csdn.net/allway2/article/details/127971361