Elasticsearch Auditing
Preparing entities
为了让审计代码能够确定一个实体实例是否为新实例,该实体必须实现以下定义的 Persistable<ID>
接口:
In order for the auditing code to be able to decide whether an entity instance is new, the entity must implement the Persistable<ID>
interface which is defined as follows:
package org.springframework.data.domain;
import org.springframework.lang.Nullable;
public interface Persistable<ID> {
@Nullable
ID getId();
boolean isNew();
}
由于 Id 的存在还不足以确定 Elasticsearch 中的实体是否为新实体,因此需要更多信息。一种方法是对此决定使用与创建相关的审计字段:
As the existence of an Id is not a sufficient criterion to determine if an enitity is new in Elasticsearch, additional information is necessary. One way is to use the creation-relevant auditing fields for this decision:
一个 Person
实体可能如下所示 - 省略取值器和设置器方法以简化:
A Person
entity might look as follows - omitting getter and setter methods for brevity:
@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 | the getter is the required implementation from the interface |
2 | an object is new if it either has no id or none of fields containing creation attributes are set. |
Activating auditing
设置实体并提供 AuditorAware
或 ReactiveAuditorAware
后,必须通过在某个配置类中设置 @EnableElasticsearchAuditing
来激活审计:
After the entities have been set up and providing the AuditorAware
- or ReactiveAuditorAware
- the Auditing must be activated by setting the @EnableElasticsearchAuditing
on a configuration class:
@Configuration
@EnableElasticsearchRepositories
@EnableElasticsearchAuditing
class MyConfiguration {
// configuration code
}
使用 reactive 堆栈时,必须执行此步骤:
When using the reactive stack this must be:
@Configuration
@EnableReactiveElasticsearchRepositories
@EnableReactiveElasticsearchAuditing
class MyConfiguration {
// configuration code
}
如果代码为不同类型包含多个 AuditorAware
Bean,则必须提供 Bean 的名称,作为 @EnableElasticsearchAuditing
注释的 auditorAwareRef
参数的参数。
If your code contains more than one AuditorAware
bean for different types, you must provide the name of the bean to use as an argument to the auditorAwareRef
parameter of the
@EnableElasticsearchAuditing
annotation.