Поскольку я новичок в Spring Boot, мне интересно, как я могу настроить детали подключения для MongoDB. Я пробовал обычные примеры, но ни один из них не описывает детали подключения.
Я хочу указать базу данных, которая будет использоваться, и URL-адрес / порт хоста, на котором работает MongoDB.
Какие-нибудь подсказки или подсказки?
spring.data.mongodb.host
иspring.data.mongodb.port
не поддерживаются, если вы используете Java-драйвер Mongo 3.0 . В таких случаяхspring.data.mongodb.uri
следует использовать для предоставления всей конфигурации, например:spring.data.mongodb.uri=mongodb://user:secret@mongo1.example.com:12345
источник
В проекте maven создайте файл
src/main/resources/application.yml
со следующим содержимым: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 автоматически использует этот файл для настройки вашего приложения. Затем вы можете запустить приложение весенней загрузки либо с профилем интеграции (и использовать локальный MongoDB)
или с производственным профилем (и используйте свою производственную MongoDB)
источник
Вы можете определить более подробную информацию, расширив 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; } }
источник
if(profileActive=="dev"){ return new Fongo(getDatabaseName()).getMongo();} else { return new MongoClient(url, port); }
Также важно отметить, что MongoDB имеет концепцию « базы данных аутентификации », которая может отличаться от базы данных, к которой вы подключаетесь. Например, если вы используете официальный образ Docker для Mongo и указываете переменные среды MONGO_INITDB_ROOT_USERNAME и MONGO_INITDB_ROOT_PASSWORD , пользователь будет создан в базе данных admin , которая, вероятно, не та база данных, которую вы хотите использовать. В этом случае вам следует указать соответствующие параметры в вашем файле application.properties, используя:
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>
источник
MONGO_INITDB_ROOT_USERNAME
ноMONGO_INITDB_ROOT_PASSWORD
в случаеpassword
.Вот как вы можете это сделать в Spring Boot 2.0 , создав собственный MongoClient, добавив Обеспечение большего контроля для подключения,
Пожалуйста, перейдите по ссылке github для получения полного исходного кода
@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; }}
источник