wake-up-neo.com

Spring Boot und wie konfiguriere ich Verbindungsdetails zu MongoDB?

Als Neueinsteiger von Spring Boot frage ich mich, wie ich Verbindungsdetails für MongoDB konfigurieren kann. Ich habe die normalen Beispiele ausprobiert, aber keines deckt die Verbindungsdetails ab.

Ich möchte die Datenbank angeben, die verwendet werden soll, und die URL/den Port des Hosts, auf dem MongoDB ausgeführt wird.

Irgendwelche Tipps oder Tricks?

68
Marco

Nur um zu zitieren Boot Docs :

Sie können die Eigenschaft spring.data.mongodb.uri Festlegen, um die URL zu ändern, oder alternativ Host/port Angeben. Beispielsweise könnten Sie in Ihrem application.properties Folgendes deklarieren:

spring.data.mongodb.Host=mongoserver
spring.data.mongodb.port=27017

Alle verfügbaren Optionen für das Präfix spring.data.mongodb Sind Felder von MongoProperties:

private String Host;

private int port = DBPort.PORT;

private String uri = "mongodb://localhost/test";

private String database;

private String gridFsDatabase;

private String username;

private char[] password;
84
Artem Bilan

spring.data.mongodb.Host und spring.data.mongodb.port werden nicht unterstützt, wenn Sie den Mongo 3.0 Java Treiber verwenden. In solchen Fällen kann spring.data.mongodb.uri sollte verwendet werden, um die gesamte Konfiguration wie folgt bereitzustellen:

spring.data.mongodb.uri=mongodb://user:[email protected]:12345
15
Ali Dehghani

Sie können weitere Details definieren, indem Sie AbstractMongoConfiguration erweitern.

@Configuration
@EnableMongoRepositories("demo.mongo.model")
public class SpringMongoConfig extends AbstractMongoConfiguration {
    @Value("${spring.profiles.active}")
    private String profileActive;

    @Value("${spring.application.name}")
    private String proAppName;

    @Value("${spring.data.mongodb.Host}")
    private String mongoHost;

    @Value("${spring.data.mongodb.port}")
    private String mongoPort;

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

    @Override
    public MongoMappingContext mongoMappingContext()
        throws ClassNotFoundException {
        // TODO Auto-generated method stub
        return super.mongoMappingContext();
    }
    @Override
    @Bean
    public Mongo mongo() throws Exception {
        return new MongoClient(mongoHost + ":" + mongoPort);
    }
    @Override
    protected String getDatabaseName() {
        // TODO Auto-generated method stub
        return mongoDB;
    }
}
14
Mari Murotani

Erstellen Sie in einem Maven-Projekt eine Datei src/main/resources/application.yml mit folgendem Inhalt:

spring.profiles: integration
# use local or embedded mongodb at localhost:27017
---
spring.profiles: production
spring.data.mongodb.uri: mongodb://<user>:<passwd>@<url>:<port>/<dbname>

Spring Boot verwendet diese Datei automatisch, um Ihre Anwendung zu konfigurieren. Anschließend können Sie Ihre Spring Boot-Anwendung entweder mit dem Integrationsprofil starten (und Ihre lokale MongoDB verwenden).

Java -jar -Dspring.profiles.active=integration your-app.jar

oder mit dem Produktionsprofil (und verwenden Sie Ihre Produktion MongoDB)

Java -jar -Dspring.profiles.active=production your-app.jar
14
asmaier

Beachten Sie auch, dass MongoDB über das Konzept der " Authentifizierungsdatenbank " verfügt, das sich von der Datenbank unterscheiden kann, zu der Sie eine Verbindung herstellen. Wenn Sie beispielsweise das offizielle Docker-Image für Mongo verwenden und die Umgebungsvariablen MONGO_INITDB_ROOT_USERNAME und MONGO_INITDB_ROOT_PASSWORD angeben ) wird ein Benutzer in der ' admin ' Datenbank erstellt, die wahrscheinlich nicht die Datenbank ist, die Sie verwenden möchten. In diesem Fall sollten Sie die Parameter in Ihrer Datei application.properties wie folgt angeben:

spring.data.mongodb.Host=127.0.0.1
spring.data.mongodb.port=27017
spring.data.mongodb.authentication-database=admin
spring.data.mongodb.username=<username specified on MONGO_INITDB_ROOT_USERNAME>
spring.data.mongodb.password=<password specified on MONGO_INITDB_ROOT_USERNAME>
spring.data.mongodb.database=<the db you want to use>
2
Danilo Teodoro

Hier erfahren Sie, wie Sie in Spring Boot 2.0 einen benutzerdefinierten MongoClient erstellen, der mehr Kontrolle über die Verbindung bietet.

Bitte folgen Sie Github-Link für vollständigen Quellcode

@Configuration
@EnableMongoRepositories(basePackages = { "com.frugalis.repository" })
@ComponentScan(basePackages = { "com.frugalis.*" })
@PropertySource("classpath:application.properties")
public class MongoJPAConfig extends AbstractMongoConfiguration {

    @Value("${com.frugalis.mongo.database}")
    private String database;
    @Value("${com.frugalis.mongo.server}")
    private String Host;
    @Value("${com.frugalis.mongo.port}")
    private String port;
    @Value("${com.frugalis.mongo.username}")
    private String username;
    @Value("${com.frugalis.mongo.password}")
    private String password;


    @Override
    protected String getDatabaseName() {
        return database;
    }

    @Override
    protected String getMappingBasePackage() {
        return "com.frugalis.entity.mongo";
    }

    @Bean
    public MongoTemplate mongoTemplate() throws Exception {
        return new MongoTemplate(mongoClient(), getDatabaseName());
    }

    @Override
    @Bean
    public MongoClient mongoClient() {

        List<MongoCredential> allCred = new ArrayList<MongoCredential>();
        System.out.println("???????????????????"+username+" "+database+" "+password+" "+Host+" "+port);
        allCred.add(MongoCredential.createCredential(username, database, password.toCharArray()));
        MongoClient client = new MongoClient((new ServerAddress(Host, Integer.parseInt(port))), allCred);
        client.setWriteConcern(WriteConcern.ACKNOWLEDGED);

        return client;
    }} 
0
Sanjay-Dev