Spring mongodb整合


Spring mongodb整合
特別なJarバッグに注意してください.
spring-core-4.05.RELEASE.jar
Objnese isStdはspring 4.0以上で提供されます.
バージョンが正しくないと投げられます.
Caused by: java.lang.NoClass DefFoundErrer: org/spring frame ebook/Objness is/Objnese Std
 
spring-data-mongodb-1.5.RELEASE.jar
このjarの前に1.6を使って以下の異常を投げます.
org.springfraamew ork.data.mapping.model.FieldNaming Strategy
1.接続プロファイルのmonogodb.propertiesを追加する:
mono.host=127.1.0.1
mono.port=27017
mono.username=sa
mono.password=sa
mono.db=mydb
 
注意monogo.dbのパラメータにスペースがあるか、またはデータ名の仕様に合わないかは、エラーが発生します.
 
2.springプロファイルを追加します.
<?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:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:dwr="http://www.directwebremoting.org/schema/spring-dwr"
       xmlns:cache = "http://www.springframework.org/schema/cache"
       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-3.1.xsd
       http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
       http://www.directwebremoting.org/schema/spring-dwr  http://www.directwebremoting.org/schema/spring-dwr-3.0.xsd
       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd
       http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache-3.1.xsd
       http://www.springframework.org/schema/data/mongo http://www.springframework.org/schema/data/mongo/spring-mongo-1.0.xsd   
       ">
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    	<property name="locations">
    		<list>
    			<value>classpath:mongodb.properties</value>
    		</list>
 		</property>
	</bean>

    <mongo:mongo id="mongo"  host="${mongo.host}" port="${mongo.port}"   />  
      
    <bean id="userCredentials" class="org.springframework.data.authentication.UserCredentials">  
        <constructor-arg name="username"  value="${mongo.username}"/>  
        <constructor-arg name="password"  value="${mongo.password}"/>  
    </bean>  
      
    <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">  
        <constructor-arg ref="mongo" />  
        <constructor-arg value="${mongo.db}" />  
        <constructor-arg ref="userCredentials" />  
    </bean> 
</beans>
3.Mongo Templateオブジェクトの獲得クラスを作成する:
package com.engine.manage.dao;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.data.mongodb.core.MongoTemplate;
 
public abstract class AbstractBaseMongoTemplete implements ApplicationContextAware {  
    
    protected MongoTemplate mongoTemplate;  
    public void setMongoTemplate(MongoTemplate mongoTemplate) {  
        this.mongoTemplate = mongoTemplate;  
    }  
    public void setApplicationContext(ApplicationContext applicationContext)  
            throws BeansException {  
        MongoTemplate mongoTemplate = applicationContext.getBean("mongoTemplate", MongoTemplate.class);  
        setMongoTemplate(mongoTemplate);  
    }  
}  
 
4.操作クラスを作成し、MongoTemplateオブジェクトの獲得クラスを継承する:
package com.engine.manage.dao;

import org.springframework.stereotype.Repository;
import com.mongodb.BasicDBObject;
import com.mongodb.DBCollection;
/**
 * mongoDB  
 * @author cglin-work
 *
 */
@Repository
public class MongoDbDao extends AbstractBaseMongoTemplete{
	
	private DBCollection dbCollection = null;
	private final String collection = "myCollection";
	
	private DBCollection getConn(){
		if(dbCollection == null){
			return mongoTemplate.getCollection(collection);
		}
		return dbCollection;
	}
	
	public void save(BasicDBObject bdbObj) {  
		getConn().save(bdbObj);
	}  
}
 
5.参照
@Autowired
	private MongoDbDao tdao;

	public MongoDbDao getTdao() {
		return tdao;
	}

	public void setTdao(MongoDbDao tdao) {
		this.tdao = tdao;
	}
	@Override
	public void saveTest(){
		 BasicDBObject bdbObj = new BasicDBObject();
		 bdbObj.put("a", "is a");
		 tdao.save(bdbObj);
}