MongoDB的Spring配置

基础知识:
1.Mongo Instance:mongo API 的数据库链接对象(com.mongodb.Mongo)
   原文: A database connection with internal pooling. For most application, you should have 1 Mongo instance for the entire JVM.
2.MongoDbFactory:spring提供的配置每个数据库的类,包括dbname,username, passwd等信息
3.MongoTemplate:spring提供的便捷操作Mongo数据库的类,可以通过Execution Callbacks直接调用Mongo API

配置项:
1.配置Mongo Instance
   两种方式:
   a.Spring原生态配置 建议使用MongoFactoryBean来包装一下Mongo而不是使用原生的Mongo配置,因为MongoFactoryBean可以将Mongo的异常转换成spring异常。
   exp:
     <!-- Factory bean that creates the Mongo instance --> 
     <bean id="mongo" class="org.springframework.data.mongodb.core.MongoFactoryBean">    
        <property name="host" value="${mongo.jdbc.host}"/>
        <property name="port" value="${mongo.jdbc.port}"/>  
     </bean>    
   
     <!-- Use this post processor to translate any MongoExceptions thrown in @Repository annotated classes --> 
     <bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>  
 
  b.使用Mongo XML Namespace来配置
 
好处可以配置更多的选项,server location, replica-sets等等
   exp :
<context:property-placeholder location="classpath:/com/myapp/mongodb/config/mongo.properties"/>
      <beans>
      <mongo:mongo host="localhost" port="27017">
           <mongo:options connections-per-host="8"
               threads-allowed-to-block-for-connection-multiplier="4"
               connect-timeout="1000"
               max-wait-time="1500"
               auto-connect-retry="true"
               socket-keep-alive="true"socket-timeout="1500"

                   slave-ok="true"
                   write-number="1"
                   write-timeout="0"
                   write-fsync="true"/>
           </mongo:mongo/>

     </beans>

2.配置MongoDBFactory
   如果不需要额外的配置,可以将h ost和port写到factory里,否则可以使用mongo-ref引用一个配置丰富的mongo配置
    a.简单的   
<mongo:db-factory dbname="common" host="${mongo.jdbc.host}" port="${mongo.jdbc.port}" id="commonFactory"/>
    b.复杂的
 <mongo:db-factory dbname="database" mongo-ref="mongo"/>

3.配置MongoTemplate
    MongoTemplate有4个构造参数
  <mongo:mongo host="localhost" port="27017"/>
  
  <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
    <constructor-arg ref="mongo"/>
    <constructor-arg name="databaseName" value="geospatial"/>
  </bean>
        接口说明:
  • MongoTemplate (Mongo mongo, String databaseName) - takes the com.mongodb.Mongo object and the default database name to operate against.

  • MongoTemplate (Mongo mongo, String databaseName, UserCredentials userCredentials) - adds the username and password for authenticating with the database.

  • MongoTemplate   (MongoDbFactory mongoDbFactory)  - takes a MongoDbFactory object that encapsulated the com.mongodb.Mongo object, database name, and username and password.
  • MongoTemplate   (MongoDbFactory mongoDbFactory, MongoConverter mongoConverter)  - adds a MongoConverter to use for mapping.
如何获取Mongo API调用:
    MongoTemplate提供了e xecuteCommand和execute两种方法实现回调     
boolean hasIndex = template.execute("geolocation", new CollectionCallback<Boolean>() {
      public Boolean doInCollection(Venue.class, DBCollection collection) throws MongoException, DataAccessException {
        List<DBObject> indexes = collection.getIndexInfo();
        for (DBObject dbo : indexes) {
          if ("location_2d".equals(dbo.get("name"))) {
            return true;
          }
        }
        return false;
      }
    });

一个完整的配置例子:
<?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: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.1.xsd
          http://www.springframework.org/schema/beans
          http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
          
    <context:component-scan base-package="org.liuchen.stats" />
    
    <!-- Activate annotation configured components -->  
    <context:annotation-config/>     
    <context:property-placeholder location="classpath:jdbc.properties"/>
    
    <!-- ============ MongoDB config start ============ -->
       <!-- 定义MongoDbFactory -->
    <mongo:db-factory dbname="db1" host="${mongo.jdbc.host}" port="${mongo.jdbc.port}" id="db1Factory"/>
	<mongo:db-factory dbname="db2" host="${mongo.jdbc.host}" port="${mongo.jdbc.port}" id="db2Factory"/>
	<mongo:db-factory dbname="db3" host="${mongo.jdbc.host}" port="${mongo.jdbc.port}" id="db3Factory"/>
	
       <!-- 定义没有_class字段的converter -->
	<bean id="mongoMappingContext" class="org.springframework.data.mongodb.core.mapping.MongoMappingContext" />
    <bean id="defaultTypeMapper" class="org.springframework.data.mongodb.core.convert.DefaultMongoTypeMapper">
		<constructor-arg name="typeKey"><null/></constructor-arg>
	</bean>
	<bean id="mongoConverter" class="org.springframework.data.mongodb.core.convert.MappingMongoConverter">
		<constructor-arg name="mongoDbFactory" ref="db1Factory" />
		<constructor-arg name="mappingContext" ref="mongoMappingContext" />
		<property name="typeMapper" ref="defaultTypeMapper"></property>
	</bean>
    
       <!-- 定义Template -->  
    <bean id="db1Mongo" class="org.springframework.data.mongodb.core.MongoTemplate">     
        <constructor-arg name="mongoDbFactory" ref="db1Factory"/>
        <constructor-arg name="mongoConverter" ref="mongoConverter"/>       
    </bean>
    <bean id="db2Mongo" class="org.springframework.data.mongodb.core.MongoTemplate">     
        <constructor-arg name="mongoDbFactory" ref="db2Factory"/>
		<constructor-arg name="mongoConverter" ref="mongoConverter"/> 
    </bean> 
    <bean id="db3Mongo" class="org.springframework.data.mongodb.core.MongoTemplate">
        <constructor-arg name="mongoDbFactory" ref="db3Factory"/>
		<constructor-arg name="mongoConverter" ref="mongoConverter"/> 
    </bean>

    <!-- Use this post processor to translate any MongoExceptions thrown in @Repository annotated classes -->  
    <bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/> 
    <!-- ============ MongoDB config end ============ -->
    
</beans>




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值