web-dev-qa-db-fra.com

Spring Boot et comment configurer les détails de connexion à MongoDB?

Étant nouveau dans Spring Boot, je me demande comment je peux configurer les détails de connexion pour MongoDB. J'ai essayé les exemples normaux mais aucun ne couvre les détails de la connexion.

Je veux spécifier la base de données qui va être utilisée et l'url/port de l'hôte qui exécute MongoDB.

Des astuces ou des conseils?

68
Marco

Juste pour citer Docs de démarrage :

Vous pouvez définir la propriété spring.data.mongodb.uri pour modifier l'URL ou spécifier un Host/port. Par exemple, vous pouvez déclarer ce qui suit dans votre application.properties:

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

Toutes les options disponibles pour le préfixe spring.data.mongodb sont des champs de 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 et spring.data.mongodb.port ne sont pas pris en charge si vous utilisez le pilote Mongo 3.0 Java. Dans de tels cas, spring.data.mongodb.uri devrait être utilisé pour fournir toute la configuration, comme ceci:

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

Vous pouvez définir plus de détails en étendant AbstractMongoConfiguration.

@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

Dans un projet maven, créez un fichier src/main/resources/application.yml avec le contenu suivant:

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 utilisera automatiquement ce fichier pour configurer votre application. Ensuite, vous pouvez démarrer votre application Spring Boot avec le profil d’intégration (et utiliser votre MongoDB locale).

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

ou avec le profil de production (et utilisez votre production MongoDB)

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

Il est également important de noter que MongoDB a le concept de " base de données d'authentification ", qui peut être différent de la base de données à laquelle vous vous connectez. Par exemple, si vous utilisez le image officielle de Docker pour Mongo et spécifiez les variables d’environnement MONGO_INITDB_ROOT_USERNAME et MONGO_INITDB_ROOT_PASSWORD , un utilisateur sera créé sur la base de données ' admin ', qui n'est probablement pas la base de données que vous souhaitez utiliser. Dans ce cas, vous devez spécifier les paramètres en conséquence dans votre fichier application.properties en utilisant:

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

Voici comment vous pouvez faire Spring Boot 2.0 en créant un MongoClient personnalisé en ajoutant un contrôle supplémentaire pour Connection,

Veuillez suivre lien github pour le code source complet

@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