|
此版本仍在开发中,尚未视为稳定版。如需最新稳定版本,请使用 Spring Data Elasticsearch 6.0.4! |
Elasticsearch 审计
准备实体
为了使审计代码能够判断一个实体实例是否为新建,该实体必须实现 Persistable<ID> 接口,其定义如下:
import org.jspecify.annotations.Nullable;
public interface Persistable<ID> {
@Nullable
ID getId();
boolean isNew();
}
由于在 Elasticsearch 中,仅凭 ID 的存在不足以判断一个实体是否为新建,因此需要额外的信息。一种方法是使用与创建相关的审计字段来做出此判断:
一个 Person 实体可能如下所示——为简洁起见,省略了 getter 和 setter 方法:
@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,或者包含创建属性的字段均未设置,则该对象为新对象。 |
激活审计功能
在实体设置完成并提供 AuditorAware 或 ReactiveAuditorAware 之后,必须通过在配置类上设置 @EnableElasticsearchAuditing 来启用审计功能:
@Configuration
@EnableElasticsearchRepositories
@EnableElasticsearchAuditing
class MyConfiguration {
// configuration code
}
使用响应式技术栈时,必须满足:
@Configuration
@EnableReactiveElasticsearchRepositories
@EnableReactiveElasticsearchAuditing
class MyConfiguration {
// configuration code
}
如果您的代码包含多个针对不同类型的 AuditorAware Bean,则必须提供要使用的 Bean 名称,作为 @EnableElasticsearchAuditing 注解的 auditorAwareRef 参数的实参。