É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 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 conseils ou des astuces?
spring.data.mongodb.host
etspring.data.mongodb.port
ne sont pas pris en charge si vous utilisez le pilote Java Mongo 3.0 . 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
la source
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>@<host>:<port>/<dbname>
Spring Boot utilisera automatiquement ce fichier pour configurer votre application. Ensuite, vous pouvez démarrer votre application Spring Boot soit avec le profil d'intégration (et utiliser votre MongoDB local)
ou avec le profil de production (et utilisez votre production MongoDB)
la source
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; } }
la source
if(profileActive=="dev"){ return new Fongo(getDatabaseName()).getMongo();} else { return new MongoClient(url, port); }
Il est également important de noter que MongoDB a le concept de « base de données d'authentification », qui peut être différente de la base de données à laquelle vous vous connectez. Par exemple, si vous utilisez l' image Docker officielle 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 sur 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_PASSWORD> spring.data.mongodb.database=<the db you want to use>
la source
MONGO_INITDB_ROOT_USERNAME
maisMONGO_INITDB_ROOT_PASSWORD
dans le cas d'unpassword
.Voici comment vous pouvez faire dans Spring Boot 2.0 en créant MongoClient personnalisé en ajoutant Fournir plus de contrôle pour la connexion,
Veuillez suivre le 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; }}
la source