Spring Boot 및 MongoDB에 대한 연결 세부 정보를 구성하는 방법은 무엇입니까?


89

Spring Boot를 처음 사용하기 때문에 MongoDB에 대한 연결 세부 정보를 구성하는 방법이 궁금합니다. 나는 정상적인 예를 시도했지만 연결 세부 사항을 다루지 않습니다.

사용할 데이터베이스와 MongoDB를 실행하는 호스트의 URL / 포트를 지정하고 싶습니다.

힌트 나 팁이 있습니까?

답변:


105

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;

이봐, 스프링 부트를 사용하는 일반 웹앱에 대해 똑같이할까요? application.properties 파일은 어디에서 찾을 수 있습니까?
Theo

기본 옵션에 의존하지 않으려면 직접 작성해야합니다. docs.spring.io/spring-boot/docs/current/reference/html/…
Artem Bilan

현재 비밀번호 필드를 char []로 설정하려는 경우 문제가 있습니다. 대신 uri 필드를 사용하십시오. 다음이 버그 보고서의 하단을 참조하십시오 github.com/spring-projects/spring-boot/issues/536
grahamrb

안녕하세요, 저는 Spring Boot를 처음 접했습니다. 이러한 구성은 어디에서 설정합니까? 인수로 전달하거나 어딘가에 설정 하시겠습니까?
Siddharth

그 문제에 대한 참조 설명서 읽어 보시기 바랍니다 : docs.spring.io/spring-boot/docs/current/reference/html/...
아르 템 빌란

31

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

12
사용자 또는 암호가 없으면 어떻게합니까?
Jesse

이 경우 @Jesse는 괜찮습니다. 기본적으로 mongo는 인증이 필요하지 않으므로 해당 경우 연결이 작동합니다.
jmojico

spring.data.mongodb.uri에 자동 재 연결을 제공하는 옵션이 있습니까?
P Satish Patro

독립 실행 형 스프링 데이터 응용 프로그램에서 작동합니까?
Sumanth Varada

20

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

spring.data.mongodb.uri에 자동 재 연결을 제공하는 옵션이 있습니까?
P Satish Patro

16

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;
    }
}

사용자 이름과 비밀번호는 어디에 지정되어 있습니까? applicaiton.properties에서 정의하고 AbstractMongoConfiguration을 확장하면 무단 추출을 제공합니다.
Noor Syed 2016

그것은 내부의 application.properties 될 것입니다
마리 Murotani

이를 위해 프로필 변수를 사용하는 것이 옳습니까? if(profileActive=="dev"){ return new Fongo(getDatabaseName()).getMongo();} else { return new MongoClient(url, port); }
anat0lius

13

MongoDB에는 " 인증 데이터베이스 " 라는 개념이 있으며 이는 연결하려는 데이터베이스와 다를 수 있습니다. 예를 들어 Mongo 용 공식 Docker 이미지를 사용하고 환경 변수 MONGO_INITDB_ROOT_USERNAMEMONGO_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>

1
그렇지 않아 MONGO_INITDB_ROOT_USERNAME있지만 MONGO_INITDB_ROOT_PASSWORD(A)의 경우 password.
Kamil Witkowski

0

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;
    }} 

방법은? 뭐-수업 추가? JPA 란 무엇입니까? 이 파일에서 가져 오기는 어디에 있습니까? 이것은 기껏해야 불완전한 답변입니다.
배리 피커
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.