Spring Boot 및 MongoDB에 대한 연결 세부 정보를 구성하는 방법은 무엇입니까?
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
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;
}
}
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
It's also important to note that MongoDB has the concept of "authentication database", which can be different than the database you are connecting to. For example, if you use the official Docker image for Mongo and specify the environment variables MONGO_INITDB_ROOT_USERNAME and MONGO_INITDB_ROOT_PASSWORD, a user will be created on 'admin' database, which is probably not the database you want to use. In this case, you should specify parameters accordingly on your application.properties file using:
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_USERNAME>
spring.data.mongodb.database=<the db you want to use>
Here is How you can do in Spring Boot 2.0 by creating custom MongoClient adding Providing more control for Connection ,
Please follow github Link for Full Source Code
@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;
}}
'IT TIP' 카테고리의 다른 글
| Chrome JavaScript 디버깅-페이지 새로 고침 또는 코드를 통한 중단 사이에 중단 점을 저장하는 방법은 무엇입니까? (0) | 2020.10.26 |
|---|---|
| 매개 변수 변경시 Angular Directive 새로 고침 (0) | 2020.10.26 |
| C # 컴파일러에서 빈 열거 형을 허용하는 이유는 무엇입니까? (0) | 2020.10.26 |
| Swagger 상속 및 구성 (0) | 2020.10.26 |
| 브라우저의 ES6 : Uncaught SyntaxError : Unexpected token import (0) | 2020.10.26 |