MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Błąd uwierzytelniania podczas uzyskiwania dostępu do mongodb przez aplikację Spring Boot

Znalazłem problem. Dla kompletności tego wątku podzielę się odpowiedzią, w tym kodem. Problem polegał na tym, że źle użyłem właściwości aplikacji spring.data.mongodb.uri:nie miała nazwy użytkownika i hasła w URI, bo pomyłkowo wierzył, że spring.data.mongodb.username i spring.data.mongodb.password to pokrywają. Tak więc albo użyj uri z nazwą użytkownika i hasłem, albo użyj jawnie właściwości hosta i bazy danych (i być może także portu). Oto kod. Będzie działać w aplikacji spring boot z obsługą mongoDB (użyj Initializr lub IntelliJ do stworzenia tego projektu). Mam model:

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 ...
}

Dane są odczytywane i zapisywane przez repozytorium:

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> {
}

Nazwa bazy danych, host i poświadczenia znajdują się w pliku 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

Ważne jest, aby nie mieszać uri z bazą danych i nazwą użytkownika. Jeśli używasz uri, musi zawierać nazwę użytkownika i hasło, na przykład:

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

Aby to przetestować, użyłem prostego programu uruchamiającego wiersz poleceń 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);
        }
    }
}

Mam nadzieję, że to wyjaśnienie pomoże innym, którzy nie mogli tego zrozumieć, jak ja przez kilka dni.

Dzięki,

Stefan



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Zmień wszystkie moje dokumenty zagnieżdżone wartość dokumentu

  2. Znajdź pierwszy element w zagnieżdżonej tablicy, który pasuje do warunków

  3. serwer zwrócił błąd na etapie uwierzytelniania SASL:Uwierzytelnianie nie powiodło się

  4. Jak w mongoDb usunąć element tablicy według jego indeksu?

  5. Jak zwiększyć istniejącą wartość w MongoDB?