【发布时间】:2019-06-26 19:59:01
【问题描述】:
如何将实体的更改记录到日志文件中?
考虑一下我有这样的Person。
import org.hibernate.envers.Audited;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.GeneratedValue;
import javax.persistence.Column;
@Entity
@Audited
public class Person {
@Id
@GeneratedValue
private int id;
private String name;
private String surname;
// add getters, setters, constructors, equals and hashCode here
}
以及更改现有Person的代码
Person p1 = new Person("name-1", "surname-1");
personRepository.save(p1);
Person p2 = personRepository.findOne(1L);
p2.setName("new-name");
personRepository.save(p2);
我怎样才能拥有
- 旧实体
- 新实体
- 字段列表已更改(类似于Diffable 的结果)
在我的日志文件中?我知道 envars 可以将更改存储在 db 中,然后让我使用 AuditReader 提取它们,但我喜欢将更改存储在 Json 文件中以将它们发送到第三方应用程序(如 Elastic)。
【问题讨论】:
-
弹性搜索必须作为当前事务的一部分立即更新,还是您能够以最终一致性模式更新弹性搜索?
-
在一个最终的过程中。实际上我喜欢登录一个文件,这样 LogStash 就可以读取它并推送到 Elastic 中。
-
你的问题太宽泛了。不如让 Envers 完成它的工作,然后在审计表中构建一些 JSON 表示的数据。
-
问题是我不喜欢 Envers 给我的数据库增加更多负载。此外,Envers 强迫我查询我的数据库以获取更改。这意味着我可怜的数据库会承受更多负载。
标签: java hibernate spring-data hibernate-envers audit-logging