Sendo novo no Spring Boot, estou me perguntando como posso configurar os detalhes de conexão para o MongoDB. Eu tentei os exemplos normais, mas nenhum cobre os detalhes da conexão.
Desejo especificar o banco de dados que será usado e a url / porta do host que executa o MongoDB.
Alguma dica ou sugestão?
spring
mongodb
spring-data
spring-boot
Marco
fonte
fonte
spring.data.mongodb.host
espring.data.mongodb.port
não são suportados se você estiver usando o driver Java Mongo 3.0 . Nesses casos,spring.data.mongodb.uri
deve ser usado para fornecer toda a configuração, assim:spring.data.mongodb.uri=mongodb://user:[email protected]:12345
fonte
Em um projeto maven, crie um arquivo
src/main/resources/application.yml
com o seguinte conteúdo:spring.profiles: integration # use local or embedded mongodb at localhost:27017 --- spring.profiles: production spring.data.mongodb.uri: mongodb://<user>:<passwd>@<host>:<port>/<dbname>
O Spring Boot usará automaticamente este arquivo para configurar seu aplicativo. Em seguida, você pode iniciar seu aplicativo de inicialização de primavera com o perfil de integração (e usar seu MongoDB local)
ou com o perfil de produção (e use seu MongoDB de produção)
fonte
Você pode definir mais detalhes estendendo 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; } }
fonte
if(profileActive=="dev"){ return new Fongo(getDatabaseName()).getMongo();} else { return new MongoClient(url, port); }
Também é importante observar que o MongoDB tem o conceito de " banco de dados de autenticação ", que pode ser diferente do banco de dados ao qual você está se conectando. Por exemplo, se você usar a imagem oficial do Docker para Mongo e especificar as variáveis de ambiente MONGO_INITDB_ROOT_USERNAME e MONGO_INITDB_ROOT_PASSWORD , um usuário será criado no banco de dados ' admin ', que provavelmente não é o banco de dados que você deseja usar. Nesse caso, você deve especificar os parâmetros de acordo em seu arquivo 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>
fonte
MONGO_INITDB_ROOT_USERNAME
masMONGO_INITDB_ROOT_PASSWORD
no caso de apassword
.Aqui está como você pode fazer no Spring Boot 2.0 criando um MongoClient personalizado adicionando Fornecendo mais controle para conexão,
Siga o link do github para obter o código-fonte 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; }}
fonte