Siendo nuevo en Spring Boot, me pregunto cómo puedo configurar los detalles de conexión para MongoDB. He probado los ejemplos normales pero ninguno cubre los detalles de la conexión.
Quiero especificar la base de datos que se utilizará y la URL / puerto del host que ejecuta MongoDB.
¿Alguna sugerencia o consejo?
spring.data.mongodb.host
yspring.data.mongodb.port
no son compatibles si está utilizando el controlador Java de Mongo 3.0 . En tales casos,spring.data.mongodb.uri
debe usarse para proporcionar toda la configuración, como esta:spring.data.mongodb.uri=mongodb://user:[email protected]:12345
fuente
En un proyecto de maven, cree un archivo
src/main/resources/application.yml
con el siguiente contenido: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 utilizará automáticamente este archivo para configurar su aplicación. Luego puede iniciar su aplicación de arranque de primavera con el perfil de integración (y usar su MongoDB local)
o con el perfil de producción (y use su MongoDB de producción)
fuente
Puede definir más detalles ampliando 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; } }
fuente
if(profileActive=="dev"){ return new Fongo(getDatabaseName()).getMongo();} else { return new MongoClient(url, port); }
También es importante tener en cuenta que MongoDB tiene el concepto de " base de datos de autenticación ", que puede ser diferente a la base de datos a la que se está conectando. Por ejemplo, si usa la imagen oficial de Docker para Mongo y especifica las variables de entorno MONGO_INITDB_ROOT_USERNAME y MONGO_INITDB_ROOT_PASSWORD , se creará un usuario en la base de datos ' admin ', que probablemente no sea la base de datos que desea usar. En este caso, debe especificar los parámetros en consecuencia en su archivo application.properties usando:
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>
fuente
MONGO_INITDB_ROOT_USERNAME
peroMONGO_INITDB_ROOT_PASSWORD
en el caso de unpassword
.A continuación, le mostramos cómo puede hacerlo en Spring Boot 2.0 creando MongoClient personalizado agregando Proporciona más control para la conexión,
Siga el enlace de github para obtener el código fuente completo
@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; }}
fuente