programing

스프링 부트 및 MongoDB 접속 상세 설정 방법

muds 2023. 4. 1. 10:07
반응형

스프링 부트 및 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.mongodbprefix는 필드입니다.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을 정의함으로써 달성할 수 있습니다.MongoClientSettingsBuilderCustomizermongo 설정을 커스터마이즈하기 위해 사용할 수 있습니다.

@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을 제어하는 방법을 나타냅니다.

전체 소스 코드는 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;
    }} 

언급URL : https://stackoverflow.com/questions/23515295/spring-boot-and-how-to-configure-connection-details-to-mongodb

반응형