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

Опитвам се да използвам възможностите за одит на Spring Data (в комбинация с Spring Boot и Spring Data Rest), но полетата за одит не се задават при запазване. Всички записвания водят до изключение на ограничение от опит за запазване на нула „Създадено от“.

Според документи с пролетни данни, аз трябва просто да мога да поставя подходящите анотации за одит (@CreatedDate/etc) на моя обект и да направя AuditorAware‹> достъпен за контекста на приложението. Знам, че моят bean за одитор се създава от задаване на точка на прекъсване в програмата за отстраняване на грешки.

Въпросите ми са:

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

2) Има ли друга конфигурация в кода по-долу, която ми липсва, за да настроя автоматичен одит?

3) Извиквам кода за създаване от POST към 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;
        }
    }

}

Всяка помощ е много ценена, благодаря!


person Jay    schedule 26.04.2015    source източник


Отговори (1)


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

Отговор: Не, не е необходимо да дефинирате AuditingEntityListener bean. Вместо това трябва да посочите @EntityListeners(AuditingEntityListener.class) в класа на вашия домейн.

e.g.

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

}

2) Има ли друга конфигурация в кода по-долу, която ми липсва, за да настроя автоматичен одит?

Отговор: Другите настройки за конфигурация изглеждат добре.

3) Извиквам кода за създаване от POST към Spring Data Rest, има ли някакви специални предупреждения при използването на тази функция за одит в комбинация с Spring Data Rest?

Отговор: Мисля, че не. Опитайте с горепосочената промяна. Просто трябва да работи.

person Nitin Arora    schedule 26.04.2015
comment
посочете @EntityListeners(AuditingEntityListener.class) във вашия домейн клас беше критичната липсваща стъпка! Това не е споменато в референтната документация, вероятно трябва да има проблем с jira за това. - person Jay; 26.04.2015
comment
@Jay, споменато е в референтната документация на Spring Data Jpa. docs.spring.io/spring -data/jpa/docs/current/reference/html/ . Просто това е XML конфигурация, а не в Java Config. - person Nitin Arora; 26.04.2015
comment
Това имах предвид: не е споменато в конфигурацията на Java. Благодаря ви за отговора! - person Jay; 26.04.2015
comment
Малко съм объркан. Какво ще стане, ако имам нужда от различни слушатели за всеки от моите обекти? @EntityListeners(EntityFooValidationListener) Трябва ли да се уверя, че слушателят ми разширява AuditingEntityListener , да декларирам и двете или нещо съвсем друго? - person Snekse; 23.09.2016