MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Грешка при удостоверяване при достъп до mongodb чрез приложението Spring Boot

Открих проблема. За пълнота на тази нишка ще споделя отговора, включително кода. Проблемът беше, че използвах свойството на приложението spring.data.mongodb.uri погрешно:то нямаше потребителското име и паролата в URI, защото погрешно вярваше, че spring.data.mongodb.username и spring.data.mongodb.password покриват това. Така че или използвайте uri с потребителско име и парола, или използвайте изрично свойствата на пролетта на хоста и базата данни (а може би също и на порта). Ето кода. Ще работи в пролетното приложение за зареждане с поддръжка на mongoDB (използвайте initializr или IntelliJ, за да създадете този проект). Имам модел:

package net.IndyStef.model;

import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;

@Document(collection = "person")
public class Person {

@Id
private String id;

private String name;
private Integer age;

public Person() {
}

public Person(String id) {
    this.id = id;
}

public Person(String id, String name, Integer age) {
    this.id = id;
    this.name = name;
    this.age = age;
}

... getters/setters omitted for breverity ...
}

Данните се четат и записват чрез хранилище:

package net.IndyStef.repository;

import net.okrongli.model.Person;
import org.springframework.data.mongodb.repository.MongoRepository;

/**
 * Created by IndyStef on 23/08/16.
 */
public interface PersonRepository extends MongoRepository<Person, String> {
}

Името на базата данни, хостът и идентификационните данни са във файла application.properties:

spring.data.mongodb.host=192.168.1.90
spring.data.mongodb.database=people
spring.data.mongodb.username=user
spring.data.mongodb.password=password
#spring.data.mongodb.uri=mongodb://192.168.1.90/people

Важно е да не смесвате uri с база данни и потребителско име. Ако използвате uri, той трябва да включва потребителското име и паролата, като това:

spring.data.mongodb.uri=mongodb://user:[email protected]/people

За да тествам това, използвах прост инструмент за изпълнение на командния ред на Spring:

package net.IndyStef;

import net.IndyStef.model.Person;
import net.IndyStef.repository.PersonRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

import java.util.List;

@SpringBootApplication
public class MongoDbTestApplication implements CommandLineRunner {

    public static void main(String[] args) {
        SpringApplication.run(MongoDbTestApplication.class, args);
    }

    @Autowired
    private PersonRepository repository;

    @Override
    public void run(String... args) {

        repository.save(new Person("peter.pan", "Peter Pan", 865));

        List<Person> people = repository.findAll();

        for (Person person: people) {
            System.out.println(person);
        }
    }
}

Надявам се, че това обяснение ще помогне на други, които не са могли да го разберат, като мен за няколко дни.

Благодаря,

Стефан



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Как мога да избера брой записи за конкретно поле с помощта на mongodb?

  2. Заявка Mongoose, където стойността не е нула

  3. Как да изпълним runCommand с Mongoose?

  4. Draft.js - Не може да се получат данни от базата данни. Грешка в кръстосания произход

  5. Добре ли е да превърнете mongo ObjectId в низ и да го използвате за URL адреси?