我正在嘗試使用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;
}
}
}
任何幫助非常感謝,謝謝!
「在您的域名類中指定@EntityListeners(AuditingEntityListener.class)」是最關鍵的缺失步驟!這在參考文檔中沒有提到,應該可能有一個jira問題。 – Jay
@Jay,它在Spring Data Jpa Reference文檔中提到。 http://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.auditing.configuration。這只是它的XML配置,不在Java配置中。 –
這就是我的意思:它沒有在java配置中提到。感謝您的答覆! – Jay