MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Errore di autenticazione durante l'accesso a mongodb tramite l'app Spring Boot

Ho trovato il problema. Per completezza di questo thread, condividerò la risposta, incluso il codice. Il problema era che ho usato la proprietà dell'applicazione spring.data.mongodb.uri in modo errato:non aveva il nome utente e la password nell'URI, perché erroneamente credeva che spring.data.mongodb.username e spring.data.mongodb.password lo coprissero. Quindi, usa l'uri con nome utente e password, oppure usa le proprietà spring host e database (e forse anche port) in modo esplicito. Ecco il codice. Funzionerà nell'app di avvio primaverile con supporto mongoDB (usa initializr o IntelliJ per creare quel progetto). Ho un modello:

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

I dati vengono letti e scritti attraverso un repository:

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

Il nome del database, l'host e le credenziali si trovano nel file 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

Importante è non mescolare l'uri con database e nome utente. Se usi uri, deve includere il nome utente e la password, in questo modo:

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

Per testare questo, ho usato un semplice corridore della riga di comando di 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);
        }
    }
}

Spero che questa spiegazione aiuti altri che non sono riusciti a capirlo, come me per un paio di giorni.

Grazie,

Stefano