2015-11-05 7 views
0

Я не могу вставить объект документа с spring-data-mongodb. Я настроил MongoDB в моем пружинном MVC проекта, как это:Данные о Spring MongoDB Ошибка аутентификации

@Configuration 
@EnableMongoRepositories(basePackages = { "com.example.store.repository" }) 
public class MongoConfiguration extends AbstractMongoConfiguration { 

    @Bean 
    public Mongo mongo() throws UnknownHostException { 
     ServerAddress serverAddress = new ServerAddress("localhost", 27017); 
     MongoCredential credential = MongoCredential.createMongoCRCredential("username", "store", "password".toCharArray()); 
     MongoClientOptions options = MongoClientOptions.builder().connectionsPerHost(4).socketKeepAlive(true).build(); 
     Mongo mongo = new MongoClient(serverAddress, Arrays.asList(credential), options); 
     return mongo; 
    } 

    @Bean(name = "MongoTemplate") 
    public MongoTemplate mongoTemplate() throws Exception { 
     return new MongoTemplate(mongo(), "store"); 
    } 

    @Override 
    protected String getDatabaseName() { 
     return "store"; 
    } 

} 

Я добавил репозиторий и документ, а также. В одном из моего контроллера я вставить фиктивный документ, как это:

@RequestMapping(value="/add", method=RequestMethod.GET) 
public String addProduct() { 
    Product product = new Product(); 
    product.setName("New Product"); 
    product.setDescription("Product Description"); 
    product.setUnitPrice(19.99); 

    productRepository.insert(product); 

    return "redirect:/"; 
} 

Когда я ввожу URL, соответствующий этот метод, он занимает всего несколько секунд и дает эту ошибку:

Request processing failed; nested exception is org.springframework.dao.DataAccessResourceFailureException: Timed out after 30000 ms while waiting for a server that matches WritableServerSelector. Client view of cluster state is {type=UNKNOWN, servers=[{address=localhost:27017, type=UNKNOWN, state=CONNECTING, exception={com.mongodb.MongoSecurityException: Exception authenticating}, caused by {com.mongodb.MongoCommandException: Command failed with error 18: 'auth failed' on server localhost:27017. The full response is { "ok" : 0.0, "errmsg" : "auth failed", "code" : 18 }}}]; nested exception is com.mongodb.MongoTimeoutException: Timed out after 30000 ms while waiting for a server that matches WritableServerSelector. Client view of cluster state is {type=UNKNOWN, servers=[{address=localhost:27017, type=UNKNOWN, state=CONNECTING, exception={com.mongodb.MongoSecurityException: Exception authenticating}, caused by {com.mongodb.MongoCommandException: Command failed with error 18: 'auth failed' on server localhost:27017. The full response is { "ok" : 0.0, "errmsg" : "auth failed", "code" : 18 }}}] 

Я не могу раскрыть проблема. У меня есть пользователь, настроенный выше, и я могу писать и читать запросы в оболочке mongo в качестве этого пользователя. Однако он терпит неудачу через весну. Зачем?

+0

конфиг выше создает более одного боб типа 'MongoTemplate' в вашем контексте. Объявленный как '@Bean (name =" MongoTemplate ")' не будет использоваться в репозиториях. Хотя это не должно вызывать ошибки, с которыми вы сталкиваетесь ... Поэтому, пожалуйста, попробуйте удалить этот объявленный bean-компонент вручную, если только он не используется с '@ Qualifier' где-то в вашем коде и затем попробуйте. У вас есть небольшой образец, воспроизводящий ошибку, на которую вы можете указать мне? Какой сервер MongoDB, версия mongo-java-client и Spring-Data-MongoDB вы используете? –

+0

@ ChristophStrobl на самом деле сэр, я не знаю, что происходит ясно. Я пытаюсь заставить его работать, используя эту статью: http://viveksoni.net/setting-up-spring-data-mongodb-spring-mvc-project-in-intellij/. У меня есть mongodb3, работающий на одной машине. mongo-java-driver: 3.1.0. –

ответ

1

Не могли бы вы попробовать этот код, как MongoConfiguration это может помочь вам и дайте мне знать, если он решил вашу проблему

@Configuration 
@EnableMongoRepositories(basePackages = { "com.example.store.repository" }) 
public class MongoConfiguration extends AbstractMongoConfiguration { 

    @Bean 
    public Mongo mongo() throws UnknownHostException { 
    return mongoClient(); 
    } 

    @Bean 
    public MongoDbFactory mongoDbFactory() { 
    return new SimpleMongoDbFactory(mongoClient(), getDatabaseName()); 
    } 

    @Bean 
    public MongoTemplate mongoTemplate() { 
    return new MongoTemplate(mongoDbFactory(), null); 
    } 

    @Override 
    protected String getDatabaseName() { 
    return "store"; 
    } 

    @Bean 
    public MongoClient mongoClient() {  
    List<MongoCredential> credentialsList = new ArrayList<MongoCredential>(); 
    credentialsList.add(MongoCredential.createCredential("username", getDatabaseName(), "password".toCharArray()); 
    ServerAddress primary = new ServerAddress("localhost", 27017); 
    MongoClientOptions mongoClientOptions = MongoClientOptions.builder().connectionsPerHost(4).socketKeepAlive(true).build(); 
    return new MongoClient(Arrays.aslist(primary), credentialsList, mongoClientOptions); 
    } 

} 
Смежные вопросы