Elasticsearch 監査
エンティティの準備
監査コードがエンティティインスタンスが新しいかどうかを判断できるようにするには、エンティティは次のように定義される Persistable<ID>
インターフェースを実装する必要があります。
package org.springframework.data.domain;
import org.springframework.lang.Nullable;
public interface Persistable<ID> {
@Nullable
ID getId();
boolean isNew();
}
ID の存在は、エンティティが Elasticsearch で新規であるかどうかを判断するための十分な基準ではないため、追加情報が必要です。1 つの方法は、この決定に作成関連の監査フィールドを使用することです。
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 が複数含まれている場合は、@EnableElasticsearchAuditing
アノテーションの auditorAwareRef
パラメーターへの引数として使用する Bean の名前を指定する必要があります。