Как настроить аудит через Java Config в Spring Data (и Spring Data Rest)?

Я пытаюсь использовать возможности аудита Spring Data (в сочетании с Spring Boot и Spring Data Rest), но поля аудита не устанавливаются на save. Все сохраняет результат в исключении ограничения от попытки сохранить значение null " создано."

по словам spring data docs, Я должен просто иметь возможность разместить соответствующие аннотации аудита (@CreatedDate / etc) на моей сущности и сделать AuditorAware доступным для контекста приложения. Я знаю ... компонент auditor aware bean создается из установки точки останова в отладчике.

мои вопросы:

1) мне нужно создать AuditingEntityListener, или я должен ожидать, что он будет предоставлен от @EnableJpaAuditing? (это не ясно в документах о конфигурации java)

2) есть ли другая конфигурация в приведенном ниже коде, которую мне не хватает для настройки автоматического аудита?

3) я вызываю код создания из сообщения в Spring Data Rest, есть ли какие-либо специальные предостережения с использованием этой функции аудита в сочетании с Spring Data Rest?

@Entity
public class Tag implements Serializable {

    // ... other fields omitted...

    @CreatedDate
    @Temporal(TemporalType.TIMESTAMP)
    private Date created = new Date();

    @CreatedBy
    @Basic(optional = false)
    @Column(name = "CREATED_BY", nullable = false, length = 24)
    private String createdBy = "";

    @LastModifiedDate
    @Basic(optional = false)
    @Column(nullable = false)
    @Temporal(TemporalType.TIMESTAMP)
    private Date updated = new Date();

    @LastModifiedBy
    @Basic(optional = false)
    @Column(name = "UPDATED_BY", nullable = false, length = 24)
    private String updatedBy = "";

    // ... getters and setters were generated ...

и конфигурации:

@EnableJpaAuditing
@Configuration
public class AuditingConfig {

    @Bean
    public AuditorAware<String> createAuditorProvider() {
        return new SecurityAuditor();
    }

    @Bean
    public AuditingEntityListener createAuditingListener() {
        return new AuditingEntityListener();
    }

    public static class SecurityAuditor implements AuditorAware<String> {
        @Override
        public String getCurrentAuditor() {
            Authentication auth = SecurityContextHolder.getContext().getAuthentication();
            String username = auth.getName();
            return username;
        }
    }

}

любая помощь очень ценится, спасибо!

1 ответов


1) Необходимо ли мне создавать AuditingEntityListener, или я должен ожидать, что он будет предоставлен от @EnableJpaAuditing? (это не ясно в документах о конфигурации java)

ответ: нет, вам не нужно определять AuditingEntityListener бобовые. Вместо этого вам нужно указать @EntityListeners(AuditingEntityListener.class) в вашем классе домена.

например

@Entity
@EntityListeners(AuditingEntityListener.class)
public class Tag implements Serializable {

}

2) есть ли другая конфигурация в приведенном ниже коде, которую мне не хватает для автоматической настройки аудит?

ответ: другие настройки выглядят нормально.

3) я вызываю код создания из сообщения в Spring Data Rest, есть ли какие-либо специальные предостережения с использованием этой функции аудита в сочетании с Spring Data Rest?

ответ: Я думаю, что нет. Попробуйте с выше предложенным изменением. Это должно сработать.