Będąc nowym w Spring Boot, zastanawiam się, jak mogę skonfigurować szczegóły połączenia dla MongoDB. Wypróbowałem normalne przykłady, ale żaden nie obejmuje szczegółów połączenia.
Chcę określić bazę danych, która będzie używana, oraz adres URL / port hosta, na którym działa MongoDB.
Jakieś wskazówki lub wskazówki?
spring.data.mongodb.host
ispring.data.mongodb.port
nie są obsługiwane, jeśli używasz sterownika Mongo 3.0 Java . W takich przypadkachspring.data.mongodb.uri
należy podać całą konfigurację, na przykład:spring.data.mongodb.uri=mongodb://user:[email protected]:12345
źródło
W projekcie Maven utwórz plik
src/main/resources/application.yml
o następującej zawartości: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 automatycznie użyje tego pliku do skonfigurowania aplikacji. Następnie możesz uruchomić aplikację do rozruchu wiosennego za pomocą profilu integracji (i użyć lokalnej bazy danych MongoDB)
lub z profilem produkcyjnym (i użyj swojej produkcyjnej MongoDB)
źródło
Możesz zdefiniować więcej szczegółów, rozszerzając 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; } }
źródło
if(profileActive=="dev"){ return new Fongo(getDatabaseName()).getMongo();} else { return new MongoClient(url, port); }
Należy również zauważyć, że MongoDB ma pojęcie „ bazy danych uwierzytelniania ”, która może różnić się od bazy danych, z którą się łączysz. Na przykład, jeśli używasz oficjalnego obrazu Dockera dla Mongo i określisz zmienne środowiskowe MONGO_INITDB_ROOT_USERNAME i MONGO_INITDB_ROOT_PASSWORD , użytkownik zostanie utworzony w bazie danych „ admin ”, która prawdopodobnie nie jest bazą danych, której chcesz użyć. W takim przypadku należy odpowiednio określić parametry w pliku application.properties za pomocą:
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>
źródło
MONGO_INITDB_ROOT_USERNAME
aleMONGO_INITDB_ROOT_PASSWORD
w przypadkupassword
.Oto, jak możesz to zrobić w Spring Boot 2.0 , tworząc niestandardowe dodawanie MongoClient. Zapewnienie większej kontroli nad połączeniem,
Aby uzyskać pełny kod źródłowy, skorzystaj z łącza 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; }}
źródło