지난번에 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;
}
}
끝~ 참 쉽쥬?
별것도 아닌데 스프링/몽고디비 버전업시키면서 겁나 삽질했다는게 참......
'개발' 카테고리의 다른 글
[Spring] 스프링에서 sitemap.xml 및 robots.txt 처리하기 (1) | 2016.02.15 |
---|---|
[MongoDB] 몽고디비 접속시 We suggest setting it to 'never' 경고 해결 (0) | 2015.10.01 |
[Spring] 스프링3.x에서 mongoDB연동하기 (0) | 2015.05.27 |