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)
    }
}
1getter はインターフェースからの必須実装です
2 オブジェクトに id がないか、作成属性を含むフィールドがまったく設定されていない場合、そのオブジェクトは新規です。

監査のアクティブ化

エンティティを設定し、AuditorAware (または ReactiveAuditorAware ) を提供した後、構成クラスで @EnableElasticsearchAuditing を設定して監査をアクティブにする必要があります。

@Configuration
@EnableElasticsearchRepositories
@EnableElasticsearchAuditing
class MyConfiguration {
   // configuration code
}

リアクティブスタックを使用する場合は、次のようにする必要があります。

@Configuration
@EnableReactiveElasticsearchRepositories
@EnableReactiveElasticsearchAuditing
class MyConfiguration {
   // configuration code
}

コードに異なる型の AuditorAware Bean が複数含まれている場合は、@EnableElasticsearchAuditing アノテーションの auditorAwareRef パラメーターへの引数として使用する Bean の名前を指定する必要があります。