Как настроить аудит через 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?
ответ: Я думаю, что нет. Попробуйте с выше предложенным изменением. Это должно сработать.