2017-10-21 770 views
2

我想配置MongoDB的審計在我的春天啓動的應用程序,並試圖堅持我的域名類當具有這個錯誤我:從這裏https://docs.spring.io/spring-data/mongodb/docs/current/reference/html/#auditing春季啓動MongoDB的審計錯誤

java.lang.IllegalArgumentException: Couldn't find PersistentEntity for type class com.example.hateoasapi.domain.Post! 

文件說,這是所有配置足夠了,但我不知道爲什麼它在我的項目中不起作用。有人能幫助我嗎?

我的MongoDB配置類:

package com.example.hateoasapi.config; 


import org.springframework.beans.factory.annotation.Value; 
import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.data.mongodb.config.AbstractMongoConfiguration; 
import org.springframework.data.mongodb.config.EnableMongoAuditing; 
import org.springframework.data.mongodb.core.MongoTemplate; 

import com.mongodb.MongoClient; 
import org.springframework.data.mongodb.repository.config.EnableMongoRepositories; 

import java.util.Collection; 
import java.util.Collections; 


@Configuration 
@EnableMongoAuditing 
@EnableMongoRepositories(value = "com.example.hateoasapi.repository") 
public class MongoConfig extends AbstractMongoConfiguration { 

    @Value("${spring.data.mongodb.database}") 
    private String databaseName; 

    @Value("${spring.data.mongodb.host}") 
    private String databaseHost; 

    @Value("${spring.data.mongodb.port}") 
    private Integer databasePort; 

    @Override 
    protected String getDatabaseName() { 
     return this.databaseName; 
    } 

    @Bean 
    @Override 
    public MongoClient mongoClient() { 
     return new MongoClient(databaseHost, databasePort); 
    } 

    @Bean 
    public MongoTemplate mongoTemplate() { 
     return new MongoTemplate(mongoClient(), databaseName); 
    } 

    @Override 
    protected Collection<String> getMappingBasePackages() { 
     return Collections.singleton("com.example.hateoasapi.domain"); 
    } 
} 

AuditorAware實現:

package com.example.hateoasapi.config; 


import com.example.hateoasapi.domain.User; 
import org.springframework.data.domain.AuditorAware; 
import org.springframework.security.core.Authentication; 
import org.springframework.security.core.context.SecurityContextHolder; 
import org.springframework.stereotype.Component; 

import java.util.Optional; 

@Component 
public class SecurityAuditor implements AuditorAware<User> { 

    @Override 
    public Optional<User> getCurrentAuditor() { 
     Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); 

     if (authentication == null || !authentication.isAuthenticated()) { 
      return null; 
     } 

     return Optional.of((User) authentication.getPrincipal()); 
    } 
} 

我的域類:

package com.example.hateoasapi.domain; 

import javax.persistence.Id; 
import javax.validation.constraints.NotBlank; 
import javax.validation.constraints.NotEmpty; 

import org.joda.time.DateTime; 
import org.springframework.data.annotation.CreatedBy; 
import org.springframework.data.annotation.CreatedDate; 
import org.springframework.data.annotation.LastModifiedDate; 
import org.springframework.data.mongodb.core.mapping.DBRef; 
import org.springframework.data.mongodb.core.mapping.Document; 
import org.springframework.data.mongodb.core.mapping.Field; 
import org.springframework.hateoas.ResourceSupport; 
import com.fasterxml.jackson.annotation.JsonCreator; 

import lombok.Getter; 
import lombok.Setter; 
import lombok.ToString; 

import static org.springframework.hateoas.mvc.ControllerLinkBuilder.*; 

import java.io.Serializable; 
import java.util.List; 

import com.example.hateoasapi.controller.*; 

@Getter 
@Setter 
@ToString 
@Document 
public class Post extends ResourceSupport implements Serializable { 

    @Id 
    @Field(value = "_id") 
    private String objectId; 

    @DBRef 
    private List<Comment> comments; 

    @DBRef 
    private User author; 

    @NotBlank 
    private String body; 

    @NotBlank 
    private String title; 

    private String categoryId; 

    @NotEmpty(message = "Tags cannot be empty") 
    private List<PostTag> tags; 

    @CreatedDate 
    private DateTime createdDate; 

    @LastModifiedDate 
    private DateTime lastModifiedDate; 

    @CreatedBy 
    private User createdBy; 

    private Long views;  
    private List<PostRating> likes; 
    private List<PostRating> dislikes; 


    @JsonCreator 
    public Post() {} 

    public Post(String title, String body) { 
     this.body = body; 
     this.title = title; 
    } 

    public Post(User author, String body, String title, String categoryId, List<PostTag> tags) { 
     this.author = author; 
     this.body = body; 
     this.title = title; 
     this.categoryId = categoryId; 
     this.tags = tags; 
    } 

    public void addLinks() { 
     this.add(linkTo(methodOn(PostController.class).getAllPosts(null)).withSelfRel()); 
    } 
} 

回答

0

如果你使用Spring啓動的最後一個版本(2.0)和Spring Data,@EnableMongoAuditing @EnableMongoRepositories不是com patible。這與EnableReactiveMongoRepositories註釋相同。

如果你想啓用mongo審計,你需要刪除你的MongoConfig類,使用配置文件來定義你的mongodb連接,一切都會工作。