스프링 부트 및 MongoDB 접속 상세 설정 방법
Spring Boot을 처음 접하기 때문에 MongoDB 연결 세부사항을 어떻게 설정할 수 있는지 궁금합니다.일반적인 예를 사용해 보았지만, 접속의 상세를 커버하는 것은 없습니다.
사용할 데이터베이스와 MongoDB를 실행하는 호스트의 URL/포트를 지정하고 싶습니다.
힌트나 팁이 있나요?
설정할 수 있습니다.
spring.data.mongodb.uri
속성을 지정하여 URL을 변경하거나host/port
예를 들어 다음과 같이 선언할 수 있습니다.application.properties
:
spring.data.mongodb.host=mongoserver
spring.data.mongodb.port=27017
에 사용할 수 있는 모든 옵션spring.data.mongodb
prefix는 필드입니다.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;
또한 MongoDB는 접속하고 있는 데이터베이스와는 다를 수 있는 "인증 데이터베이스"라는 개념을 가지고 있다는 점도 중요합니다.예를 들어 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>
spring.data.mongodb.host
그리고.spring.data.mongodb.port
는 Mongo 3.0 Java 드라이버를 사용하는 경우 지원되지 않습니다.이런 경우에는spring.data.mongodb.uri
는, 다음과 같이 모든 설정을 제공하기 위해서 사용할 필요가 있습니다.
spring.data.mongodb.uri=mongodb://user:secret@mongo1.example.com:12345
메이븐 프로젝트에서 파일 생성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;
}
}
application.properties의 Atlas MongoDB 클러스터에 접속하려고 하는 경우 다음과 같은 설정을 해야 합니다.
spring.data.mongodb.uri=mongodb+srv://databaseUsername:usernamePassword@cluster0.j4koa.mongodb.net/databaseUsername?retryWrites=true&w=majority
내 경우 테스트 컨테이너를 사용하여 통합 테스트를 위해 MongoDB를 설정해야 했습니다.실행 시 Mongo 포트를 지정해야 했기 때문에 propertites 파일을 사용할 수 없었습니다.Spring Boot에서 제공하는 원래 MongoDB 자동 구성을 미리 확인하고 싶지만 일부 속성을 덮어씁니다.이것은 bean of type을 정의함으로써 달성할 수 있습니다.MongoClientSettingsBuilderCustomizer
mongo 설정을 커스터마이즈하기 위해 사용할 수 있습니다.
@Bean
public MongoClientSettingsBuilderCustomizer clientSettingsBuilderCustomizer(final GenericContainer<?> mongoDBContainer) {
String database = environment.getProperty("spring.data.mongodb.database");
ConnectionString connectionString = new ConnectionString(String.format("mongodb://localhost:%s/%s", mongoDBContainer.getFirstMappedPort(), database));
return settings -> settings.applyConnectionString(connectionString);
}
단순히 환경변수에서 MongoDB 연결 문자열을 읽는 경우 다음 환경변수를 설정하는 방법이 있습니다.
SPRING_DATA_MONGODB_URI=mongodb://localhost:27017/trying-mongo
해서 '아까', '아까', '아까'는가 없어요.application.properties
스프링 데이터 mongo는 기본적으로 위의 환경 변수에서 값을 읽습니다.
다음으로 커스텀 MongoClient를 생성하여 Spring Boot 2.0에서 Connection을 제어하는 방법을 나타냅니다.
@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;
}}
언급URL : https://stackoverflow.com/questions/23515295/spring-boot-and-how-to-configure-connection-details-to-mongodb
'programing' 카테고리의 다른 글
스프링 부트@DataJpaTest H2 임베디드 데이터베이스 생성 스키마 (0) | 2023.04.01 |
---|---|
angular-loader.js의 용도는 무엇입니까? (0) | 2023.04.01 |
ui-router 및 Angularjs를 사용하여 TOP로 자동 스크롤 (0) | 2023.04.01 |
JSON.stringify() 출력의 늘 값을 숨깁니다. (0) | 2023.04.01 |
재료-ui 자동완료 경고 자동완료에 제공된 값이 잘못되었습니다. (0) | 2023.04.01 |