복붙노트

[SPRING] 자바 스프링으로 MongoDB 3.0에 연결하기

SPRING

자바 스프링으로 MongoDB 3.0에 연결하기

저는 Spring을 사용하여 MongoDB에 자격 증명으로 액세스하는 데 문제가 있습니다. 자격 증명 없이는 charme처럼 작동하지만, 사용하는 것은 실패합니다.

    Failed to authenticate to database [yourdatabase], username = [yourusername], password = [x******z] 

http://docs.mongodb.org/manual/core/authentication/에서 읽을 수있는 새로운 인증 기본값이 있어야합니다.

질문 : 누구든지 자격 증명으로 Spring을 사용하는 방법을 찾았습니까? 트릭을 만들기 위해 어떤 스프링 데이터 - 몽고 version 버전을 사용 했습니까?

해결법

  1. ==============================

    1.많은 시도와 읽기 후에 MongoDB 3.0을 인증과 함께 작동시키는 방법을 발견했습니다.

    많은 시도와 읽기 후에 MongoDB 3.0을 인증과 함께 작동시키는 방법을 발견했습니다.

    이것은 MongoDB 3.0의 새로운 설치이며 업그레이드가 필요 없습니다.

    필자는 다음과 같은 종속성을 사용했습니다.

    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-mongodb</artifactId>
        <version>1.6.2.RELEASE</version>
    </dependency>
    
    <dependency>
        <groupId>org.mongodb</groupId>
        <artifactId>mongo-java-driver</artifactId>
        <version>3.0.0</version>
    </dependency>
    

    부모로서 갖는 것

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.2.2.RELEASE</version>
    </parent>
    

    그런 다음 구성 파일에서

    /**
     * DB connection Factory
     * 
     * @return a ready to use MongoDbFactory
     */
    @Bean
    public MongoDbFactory mongoDbFactory() throws Exception {
    
        // Set credentials      
        MongoCredential credential = MongoCredential.createCredential(mongoUser, databaseName, mongoPass.toCharArray());
        ServerAddress serverAddress = new ServerAddress(mongoHost, mongoPort);
    
        // Mongo Client
        MongoClient mongoClient = new MongoClient(serverAddress,Arrays.asList(credential)); 
    
        // Mongo DB Factory
        SimpleMongoDbFactory simpleMongoDbFactory = new SimpleMongoDbFactory(
                mongoClient, databaseName);
    
        return simpleMongoDbFactory;
    }
    
    /**
     * Template ready to use to operate on the database
     * 
     * @return Mongo Template ready to use
     */
    @Bean
    public MongoTemplate mongoTemplate() throws Exception {
        return new MongoTemplate(mongoDbFactory());
    }
    

    마침내 MongoTemplate 빈에 대한 액세스 권한이 있으면 어디서나 할 수 있습니다.

    mongoTemplate.insert(objectToStore, collectionName);
    
  2. ==============================

    2.Spring.data.mongodb.host 및 spring.data.mongodb.port는 Mongo 3.0 Java 드라이버를 사용하는 경우 지원되지 않습니다. 이 경우 spring.data.mongodb.uri를 사용하여 다음과 같이 모든 구성을 제공해야합니다.

    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
    

    spring.data.mongodb.uri를 application.yml에 추가하면 MongoDbFactory와 MongoTemplate이 자동으로 설정됩니다.

  3. ==============================

    3.귀하의 pom 에서이 버전을 사용 :

    귀하의 pom 에서이 버전을 사용 :

    <!-- mongodb java driver -->
    <dependency>
        <groupId>org.mongodb</groupId>
        <artifactId>mongo-java-driver</artifactId>
        <version>3.2.1</version>
    </dependency>
    
    <!-- Spring data mongodb -->
    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-mongodb</artifactId>
        <version>1.8.2.RELEASE</version>
    </dependency>
    

    그리고 봄에이 구성 :

        <?xml version="1.0" encoding="UTF-8"?>
    
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xmlns:context="http://www.springframework.org/schema/context"
        xmlns:util="http://www.springframework.org/schema/util"
        xmlns:mongo="http://www.springframework.org/schema/data/mongo"
        xsi:schemaLocation="http://www.springframework.org/schema/context
              http://www.springframework.org/schema/context/spring-context-3.0.xsd
              http://www.springframework.org/schema/data/mongo
              http://www.springframework.org/schema/data/mongo/spring-mongo-1.0.xsd
              http://www.springframework.org/schema/beans
              http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
              http://www.springframework.org/schema/util 
              http://www.springframework.org/schema/util/spring-util-3.0.xsd">
    
        <!-- Seeds -->
        <bean id="mongoSeedListID" class="java.util.ArrayList">
        <constructor-arg>
            <list>
                <ref bean="mongoSeedlID" />
            </list>
        </constructor-arg>
        </bean>
    
        <bean id="mongoSeedlID" class="com.mongodb.ServerAddress">
                <constructor-arg type="java.lang.String" name="host" value="DATABASE_HOST" />
                <constructor-arg type="int" name="port" value="DATABASE_PORT" />
        </bean>
    
        <!-- Credentials -->
        <bean id="mongoCredentialListID" class="java.util.ArrayList">
        <constructor-arg>
            <list>
                <ref bean="mongoCredentialID" />
            </list>
        </constructor-arg>
        </bean>
    
        <bean id="mongoCredentialID" class="com.mongodb.MongoCredential">
                <constructor-arg name="mechanism" value = "#{T(com.mongodb.AuthenticationMechanism).SCRAM_SHA_1}" />
                <constructor-arg type="java.lang.String" name="userName" value="DATABASE_USERNAME" />
                <constructor-arg type="java.lang.String" name="source" value="DATABASE_SOURCE" />
                <constructor-arg type="char[]" name="password" value="DB_USER_PASS" />
        </bean>
    
        <!-- MongoClient -->
        <bean id="mongoClientID" class="com.mongodb.MongoClient">
                <constructor-arg ref="mongoSeedListID" />
                <constructor-arg ref="mongoCredentialID"  />
        </bean>
    
        <!-- MongoDbFactory -->
        <bean id="simpleMongoDbFactoryID" class="org.springframework.data.mongodb.core.SimpleMongoDbFactory">
            <constructor-arg ref="mongoClientID" />
            <constructor-arg name="databaseName" value="APP_DATABASENAME" />
        </bean>
    
        <!-- MongoTemplate -->
        <bean id="mongoTemplateID" class="org.springframework.data.mongodb.core.MongoTemplate">
            <constructor-arg ref="simpleMongoDbFactoryID" />
        </bean>
    
        <bean id="log4jInitializationID" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
            <property name="targetClass" value="org.springframework.util.Log4jConfigurer" />
            <property name="targetMethod" value="initLogging" />
            <property name="arguments">
                <list>
                    <value>classpath:log4j/log4j_test.properties</value>
                </list>
            </property>
        </bean>
    
     </beans>
    

    이 구성을 사용하면 MongoTemplate 만 삽입하면됩니다.

       @Autowired
       @Qualifier("mongoTemplateID")
       private MongoTemplate mongoTemplate;
    

    이것은 잘 작동해야합니다 =)

  4. ==============================

    4.다음은 Spring과 MongoDB 3.0.7을 연결하는 XML 버전입니다 (매개 변수는 속성 파일에서 전달됩니다).

    다음은 Spring과 MongoDB 3.0.7을 연결하는 XML 버전입니다 (매개 변수는 속성 파일에서 전달됩니다).

    <beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mongo="http://www.springframework.org/schema/data/mongo"
    xsi:schemaLocation="http://www.springframework.org/schema/context
          http://www.springframework.org/schema/context/spring-context.xsd
          http://www.springframework.org/schema/data/mongo
          http://www.springframework.org/schema/data/mongo/spring-mongo.xsd
          http://www.springframework.org/schema/beans
          http://www.springframework.org/schema/beans/spring-beans.xsd">
    
    <mongo:mongo-client host="${mongo.url}" port="${mongo.port}" credentials="${mongo.user}:${mongo.pass}@${mongo.dbname}">
        <mongo:client-options write-concern="NORMAL" />
    </mongo:mongo-client>
    
    <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
        <constructor-arg name="mongo" ref="mongo"/>
        <constructor-arg name="databaseName" value="${mongo.dbname}"/>
    </bean>
    

    그런 다음 Java에서 mongoTemplate을 다음과 같이 얻습니다.

        @Autowired
    MongoTemplate mongoTemplate;
    
    public String mongoTest() {
    
        DBCollection dc = mongoTemplate.getCollection("yourCollection");
    
        logger.debug("--get collection name=" + dc.getFullName());
    
    }
    
  5. ==============================

    5.Mongodb 3를 Spring 데이터와 함께 사용하는 방법은 두 가지가있을 수 있습니다. 두 가지 모두 인증 스키마의 다운 그레이드를 포함합니다.

    Mongodb 3를 Spring 데이터와 함께 사용하는 방법은 두 가지가있을 수 있습니다. 두 가지 모두 인증 스키마의 다운 그레이드를 포함합니다.

    인증 메커니즘을 다운 그레이드하려면 다음을 수행하십시오.

    var schema = db.system.version.findOne({"_id" : "authSchema"})
    schema.currentVersion = 3
    db.system.version.save(schema)
    

    또는 버전 5 (mongo 3)와 버전 3 (mongo 3)을 혼합하여 만들 수도 있습니다. 버전 3을 사용하여 만든 사용자 만 (Spring 데이터에서) 연결할 수 있습니다.

    3.0 + mongo 3 베타 드라이버를 사용해 볼 수 있습니다 : 일반적으로이 조합은 "레거시 코드"와 함께 작동하지만 스프링 데이터와 함께 작동하도록 관리하지 않았습니다.

  6. from https://stackoverflow.com/questions/28958789/connecting-to-mongodb-3-0-with-java-spring by cc-by-sa and MIT license