É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?
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 unHost/port
. Par exemple, vous pouvez déclarer ce qui suit dans votreapplication.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;
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
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;
}
}
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
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>
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;
}}