Spring Boot中处理审计的最佳方法是什么?

3
我们追踪系统中的任何操作,因此我们在监听任何操作的实体上使用@EntityListeners(AuditListener.class)
代码片段:
public class AuditListener {

    @Autowired
    private AuditRepository auditRepo; 

    @PrePersist
    public void preSave(Object object) {
        // save audit to database
    }
}

那么在IT技术中,最好使用@PrePersist还是@PostPersist呢?

你想在persist操作之前还是之后进行审计? - undefined
我想创建一个审计,以确定实体是否已经成功添加或更新。 那么最好是使用前审计还是后审计? - undefined
1
我会说“帖子”。更多信息请点击这里 - undefined
1个回答

3

正如@aksappy所说,如果您想要在insert之前或之后进行审核,您必须做出选择。但是您应该知道,@prePersist@postPersist并不是唯一需要关注的内容。还有@preUpdate@postUpdate。我没有提到@preRemove@postRemove,因为似乎不能对删除操作进行审核(我不确定这一点,因为我自己没有测试过)。

但我极力推荐您使用Hibernate Envers,这是一个成熟的实体审计/版本库库。它非常容易设置,一旦完成后,在每个实体上使用也很容易。它将记录发生的每个添加、修改和删除。当您想要显示实体历史记录时,它非常有用,利用Envers提供的方法将其处理。

我建议您查看此指南https://www.baeldung.com/database-auditing-jpa#hibernate,亲自了解一下。如果您想尝试,它会向您展示如何设置Hibernate Envers


1
谢谢Pilpo,我知道所有的注释,但是我在寻找关于前置或后置的内容。 - undefined
1
就我所知,预处理和后处理之间没有最佳选项。如果“插入”操作出现错误,您将会得到一个异常,代码会停止并且回滚事务。因此,无论选择哪个选项都不会错。也许在实体插入数据库后进行“审计”更有意义,所以如果您认为如此,应该使用“后处理”。但是,请不要过多考虑,它在任何情况下都能正常工作 :) - undefined
你好,Pilpo。 @EntityListener会降低应用程序的性能吗? 我在所有其他类都继承的父类上使用它。 - undefined
这完全取决于你的EntityListener所做的工作。如果它是一个繁重的任务,那么对性能会有影响;如果不是,那就不用担心,一切都好。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接