AbstractMongoEventListener,用于识别更新或添加事件spring boot mongoDb
我正在尝试使用SpringDataMongoDB应用更新和删除操作的审计。对于add操作,我使用下面的模型在数据库中查找add,它工作得非常好AbstractMongoEventListener,用于识别更新或添加事件spring boot mongoDb,spring,mongodb,spring-boot,spring-data-jpa,spring-data,Spring,Mongodb,Spring Boot,Spring Data Jpa,Spring Data,我正在尝试使用SpringDataMongoDB应用更新和删除操作的审计。对于add操作,我使用下面的模型在数据库中查找add,它工作得非常好 public class Audit { @CreatedBy private String CreatedBy; @CreatedDate private Instant createdDate; @LastModifiedBy private String lastModifiedUser;
public class Audit {
@CreatedBy
private String CreatedBy;
@CreatedDate
private Instant createdDate;
@LastModifiedBy
private String lastModifiedUser;
@LastModifiedDate
private Instant lastModifiedDate;
}
如何维护更新和删除操作的历史记录?我知道spring数据中有mongoDb的生命周期挂钩
@Component
@EnableMongoAuditing
public class GenericAuditing extends AbstractMongoEventListener<Object> {
private MongoTemplate mongoTemplate;
private static final Logger LOG = LoggerFactory.getLogger(GenericAuditing.class);
public GenericAuditing(MongoTemplate mongoTemplate) {
this.mongoTemplate = mongoTemplate;
}
@Override
public void onAfterSave(AfterSaveEvent<Object> event) {
LOG.info("On After Save inserting the record to the Delete and update collection");
}
@Override
public void onAfterDelete(AfterDeleteEvent<Object> event) {
LOG.info("On After delete inserting the record to the Delete and update collection");
Object obj = event.getSource();
DeleteUpdateAudit deleteUpdateAudit = new DeleteUpdateAudit(obj, DatabaseAction.DELETE);
this.mongoTemplate.insert(deleteUpdateAudit);
}
}
@组件
@启用自动编辑
公共类GenericaAuditing扩展了AbstractMongoEventListener{
私有MongoTemplate MongoTemplate;
私有静态最终记录器LOG=LoggerFactory.getLogger(GenericAuditing.class);
公共通用审计(MongoTemplate MongoTemplate){
this.mongoTemplate=mongoTemplate;
}
@凌驾
AfterSave上的公共无效(AfterSaveEvent事件){
LOG.info(“保存并将记录插入删除和更新集合后打开”);
}
@凌驾
AfterDelete上的公共无效(AfterDeleteEvent事件){
LOG.info(“删除后打开,将记录插入删除和更新集合”);
Object obj=event.getSource();
deleteUpdateAudi DeleteUpdateAudit=新的DeleteUpdateAudit(obj,DatabaseAction.DELETE);
this.mongoTemplate.insert(deleteUpdateAudit);
}
}
如何确定onAfterSave用于保存或更新。因为保存和更新操作都会调用该方法。审核删除和更新操作的最佳方法是什么关于识别保存或更新,您可以查看
AfterSaveEvent
中的文档
。如果它有一个\u id
,则它是一个更新:
@Override
public void onAfterSave(AfterSaveEvent<Object> event) {
LOG.info("On After Save inserting the record to the Delete and update collection");
boolean isUpdate = event.getDocument().containsKey("_id");
if (isUpdate) {
// add your specific update logic here
} else {
// add your specific insert logic
}
}
@覆盖
AfterSave上的公共无效(AfterSaveEvent事件){
LOG.info(“保存并将记录插入删除和更新集合后打开”);
布尔值isUpdate=event.getDocument().containsKey(“_id”);
如果(isUpdate){
//在此处添加特定的更新逻辑
}否则{
//添加特定的插入逻辑
}
}
您可以从事件中获取creationTime和lastUpdate。如果双方相等,那就是一次拯救
@覆盖
AfterSave上的公共无效(AfterSaveEvent事件){
日期creationTime=event.getDocument().getDate(“creationTime”);
Date lastUpdated=event.getDocument().getDate(“lastUpdated”);
if(creationTime.equals(LastUpdate)){
//拯救
}否则{
//更新
}
}