[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.많은 시도와 읽기 후에 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.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.귀하의 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.다음은 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.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 베타 드라이버를 사용해 볼 수 있습니다 : 일반적으로이 조합은 "레거시 코드"와 함께 작동하지만 스프링 데이터와 함께 작동하도록 관리하지 않았습니다.
from https://stackoverflow.com/questions/28958789/connecting-to-mongodb-3-0-with-java-spring by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 자바 스프링스에서 <String, List> 맵을 삽입하는 방법? (0) | 2019.01.12 |
---|---|
[SPRING] java.lang.IllegalArgumentException : 형식의 반환 값에 대한 변환기가 없습니다. (0) | 2019.01.12 |
[SPRING] Spring과 MVC의 적절한 프로젝트 구조 (0) | 2019.01.12 |
[SPRING] 봄, 최대 절전 모드 및 선언적 트랜잭션 구현 : 활성 트랜잭션이 없음 (0) | 2019.01.12 |
[SPRING] DB로부터의 Spring PropertyPlaceholderConfigurer로드 (0) | 2019.01.12 |