2015-04-26 134 views
6

我正在嘗試使用Spring Data的審計功能(與Spring Boot和Spring Data Rest結合使用),但審計字段沒有在保存時設置。所有保存都會導致一個約束異常,因爲它試圖保存一個空的「創建者」。如何在Spring Data(和Spring Data Rest)中通過Java Config配置審計?

根據spring data docs,我應該能夠在我的實體上放置適當的審計註釋(@ 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; 
     } 
    } 

} 

任何幫助非常感謝,謝謝!

回答

8

1)我是否需要創建一個AuditingEntityListener,或者我應該期望從@EnableJpaAuditing提供一個? (在關於java config的文檔中並不清楚)

答案:不,您不需要定義AuditingEntityListener bean。相反,您需要在您的域類上指定@EntityListeners(AuditingEntityListener.class)

例如

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

} 

2)在下面的代碼中是否有其他配置,我缺少設置自動審計?

答案:其他配置設置看起來不錯。

3)我從一個POST調用創建代碼到Spring Data Rest,是否有任何與Spring Data Rest結合使用這種審計功能的特殊注意事項?我想不是。我想不是。嘗試以上建議的變化。它應該只是工作。

+1

「在您的域名類中指定@EntityListeners(AuditingEntityListener.class)」是最關鍵的缺失步驟!這在參考文檔中沒有提到,應該可能有一個jira問題。 – Jay

+0

@Jay,它在Spring Data Jpa Reference文檔中提到。 http://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.auditing.configuration。這只是它的XML配置,不在Java配置中。 –

+0

這就是我的意思:它沒有在java配置中提到。感謝您的答覆! – Jay

相關問題