Hibernate Envers是一个实现持久实体的审核和版本控制的模块。审计和版本控制是构建生产级Spring 启动微服务的关键组件。Hibernate Envers与Spring Boot无缝集成以实现相同的目标。
在这篇文章中,我们将在我们的Spring Boot Starter应用程序中集成Hibernate Envers。
数据库审核对于合规性非常重要。此外,很多时候,必须分析生产问题。对于这样的分析,审计数据非常有用。
Hibernate Envers POM Dependency
将 Hibernate Envers 与 Spring Boot 一起使用的第一步是将依赖项包含在 POM 文件中。
<dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-envers</artifactId> <version>5.3.1.Final</version> </dependency>
为休眠实体启用审核
下一步是简单地为所需实体启用审核。这可以通过使用@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。它包含两个字段REV和REVTSTMP。VEHICLE_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上找到。








![[ZJCTF 2019]Login--动态调试--详细版](https://img-blog.csdnimg.cn/22e7eb7fe84d47d59ba16429d65c821b.png)

![[02] BLEMotion-Kit 基于QMI8658传感器使用加速度计进行倾斜检测](https://img-blog.csdnimg.cn/53cd452e32644dd3b299af7cc10539cc.gif#pic_center)








