Spring Boot를 처음 사용하기 때문에 MongoDB에 대한 연결 세부 정보를 구성하는 방법이 궁금합니다. 나는 정상적인 예를 시도했지만 연결 세부 사항을 다루지 않습니다.
사용할 데이터베이스와 MongoDB를 실행하는 호스트의 URL / 포트를 지정하고 싶습니다.
힌트 나 팁이 있습니까?
답변:
Boot Docs 를 인용하면 다음과 같습니다.
spring.data.mongodb.uri
속성을 설정 하여 URL을 변경하거나host/port
. 예를 들어에서 다음을 선언 할 수 있습니다application.properties
.
spring.data.mongodb.host=mongoserver
spring.data.mongodb.port=27017
spring.data.mongodb
접두사에 사용할 수있는 모든 옵션 은 다음 필드입니다 MongoProperties
.
private String host;
private int port = DBPort.PORT;
private String uri = "mongodb://localhost/test";
private String database;
private String gridFsDatabase;
private String username;
private char[] password;
spring.data.mongodb.host
그리고 spring.data.mongodb.port
당신이 사용하는 경우 지원되지 않습니다 몽고 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 사용)을 사용하여 스프링 부트 애플리케이션을 시작할 수 있습니다.
java -jar -Dspring.profiles.active=integration your-app.jar
또는 프로덕션 프로필과 함께 (그리고 프로덕션 MongoDB 사용)
java -jar -Dspring.profiles.active=production your-app.jar
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에는 " 인증 데이터베이스 " 라는 개념이 있으며 이는 연결하려는 데이터베이스와 다를 수 있습니다. 예를 들어 Mongo 용 공식 Docker 이미지를 사용하고 환경 변수 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
(A)의 경우 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;
}}