Elasticsearch Auditing
Preparing entities
为了让审计代码能够确定一个实体实例是否为新实例,该实体必须实现以下定义的 Persistable<ID>
接口:
package org.springframework.data.domain;
import org.springframework.lang.Nullable;
public interface Persistable<ID> {
@Nullable
ID getId();
boolean isNew();
}
由于 Id 的存在还不足以确定 Elasticsearch 中的实体是否为新实体,因此需要更多信息。一种方法是对此决定使用与创建相关的审计字段:
一个 Person
实体可能如下所示 - 省略取值器和设置器方法以简化:
@Document(indexName = "person")
public class Person implements Persistable<Long> {
@Id private Long id;
private String lastName;
private String firstName;
@CreatedDate
@Field(type = FieldType.Date, format = DateFormat.basic_date_time)
private Instant createdDate;
@CreatedBy
private String createdBy
@Field(type = FieldType.Date, format = DateFormat.basic_date_time)
@LastModifiedDate
private Instant lastModifiedDate;
@LastModifiedBy
private String lastModifiedBy;
public Long getId() { (1)
return id;
}
@Override
public boolean isNew() {
return id == null || (createdDate == null && createdBy == null); (2)
}
}
1 | getter 是接口的必需实现 |
2 | 如果对象既没有 id ,或者不包含创建属性的字段未设置,则该对象为新对象。 |
Activating auditing
设置实体并提供 AuditorAware
或 ReactiveAuditorAware
后,必须通过在某个配置类中设置 @EnableElasticsearchAuditing
来激活审计:
@Configuration
@EnableElasticsearchRepositories
@EnableElasticsearchAuditing
class MyConfiguration {
// configuration code
}
使用 reactive 堆栈时,必须执行此步骤:
@Configuration
@EnableReactiveElasticsearchRepositories
@EnableReactiveElasticsearchAuditing
class MyConfiguration {
// configuration code
}
如果代码为不同类型包含多个 AuditorAware
Bean,则必须提供 Bean 的名称,作为 @EnableElasticsearchAuditing
注释的 auditorAwareRef
参数的参数。