본문 바로가기

개발

[MongoDB] Spring 4.x + MongoDB 3.x 연동하기


지난번에 Spring + MongoDB 연동을 포스팅했었는데요, 그때는 Spring 3.2.2 기준에 MongoDB 2.6 버전이였습니다.

다시 구성하려고 보니 스프링4.x + 몽고디비 3.x 구성시에는 조금 달라진 부분이 있더군요

제일큰게 몽고디비가 버전이 3대로 올라오면서 인증방식 변화로 예전처럼 해서는 접속이 안되는 문제가 있었습니다.

[ Spring 3.2.2 + MongoDB 2.6 조합 포스팅 보기 ]



1. 개발환경

- JAVA 8 - Tomcat7 - Spring Framework 4.1.7.RELEASE - Spring-data-mongodb 1.8.0.RELEASE

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



2. mongoContext.xml 작성

<?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:mongo="http://www.springframework.org/schema/data/mongo"

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd

http://www.springframework.org/schema/data/mongo http://www.springframework.org/schema/data/mongo/spring-mongo-1.8.xsd">


<mongo:mongo-client

        host="접속주소"

        port="27017"

        credentials="사용자명:비밀번호@데이터베이스명">

        <mongo:client-options

            connections-per-host="8"

            threads-allowed-to-block-for-connection-multiplier="4"

            connect-timeout="1000"

            max-wait-time="1500"

            socket-keep-alive="true"

            socket-timeout="1500"

        />    

    </mongo:mongo-client>

    <bean id="mongoTemplate"

            class="org.springframework.data.mongodb.core.MongoTemplate">

            <constructor-arg ref="mongo"/>

            <constructor-arg name="databaseName" value="데이터베이스명"/>    

    </bean>

    

    <!-- DAO-->

     <bean id="TestDAO"

            class="com.test.TestDAO">

            <property name="mongoTemplate" ref="mongoTemplate"/>    

    </bean>


</beans>



3. DAO 작성시 기본쿼리 ( 기본적인 insert / update / delete / find )

Insert

MongoTemplate mongoTemplate;

mongoTemplate.insert(추가할데이터 VO 클래스, "컬렉션이름");



Update

// 업데이트할 아이템 조회

Query query = Query.query(Criteria.where("_id").is(_id));

// 업데이트할 항목 지정

Update update = new Update();

update.set("confirm", true);

// 업데이트

WriteResult WriteResult = mongoTemplate.updateFirst(query, update, "컬렉션이름");



Delete

// 삭제할 아이템 조회

Query query = Query.query(Criteria.where("_id").is(_id));

// 삭제

WriteResult WriteResult = mongoTemplate.remove(query, "컬렉션이름");

* 공통: WriteResult 로 성공 유무를 받을 수 있습니다.  getN() = 1 성공 , getN() = 0 실패



find

// 검색 조건지정

Query Query = new Query(new Criteria("key").all(value));

mongoTemplate.find(Query, TestVO.class, "컬렉션이름");


find ( 다중조건 )

Query Query = new Query(new Criteria("key1").all(value1));

Query.addCriteria(new Criteria("key2").all(value2));




count(갯수)

Query Query = new Query(new Criteria("key1").all(value1));

(int)mongoTemplate.count(Query, "컬렉션이름");



간단하게 메소드화 시켜서 사용


/**

 * 알람 메시지 상태를 읽음으로 변경한다

 * @param _id

 */

public boolean updateAlarmConfirm(String _id){

try{

Query query = Query.query(Criteria.where("_id").is(_id));

Update update = new Update();

update.set("confirm", true);

// 상태 업데이트

WriteResult WriteResult = mongoTemplate.updateFirst(query, update, COLLECTION_ALARM);

if(WriteResult.getN() == 1){

return true;

}else if(WriteResult.getN() == 0){

return false;

}else{

return false;

}

}catch(Exception e){

return false;

}

}



끝~ 참 쉽쥬?

별것도 아닌데 스프링/몽고디비 버전업시키면서 겁나 삽질했다는게 참......