spring+mongodb的整合

mongodb介紹

MongoDB 是一個基於分佈式文件存儲的數據庫。由 C++ 語言編寫。旨在爲 WEB 應用提供可擴展的高性能數據存儲解決方案。
MongoDB 是一個介於關係數據庫和非關係數據庫之間的產品,是非關係數據庫當中功能最豐富,最像關係數據庫的。java

MongoDB is an open-source, document database designed for ease of development and scaling. The Manual introduces key concepts in MongoDB, presents the query language, and provides operational and administrative considerations and procedures as well as a comprehensive reference section.web

引入mongodb的包

使用mongodb提供的java api包是:
org.mongodb:mongo-java-driver
與spring整合,則須要引入另外一個包:
org.springframework.data:spring-data-mongodbspring

gradle引入配置:

//mongodb
    compile 'org.springframework.data:spring-data-mongodb:1.8.0.RELEASE'
    compile 'org.mongodb:mongo-java-driver:3.1.0'

maven引入配置--maven倉庫

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

mongodb配置

在spring的配置文件中,找到<bean>標籤,加入mongo的xml命名空間:
xmlns:mongo="http://www.springframework.org/schema/data/mongo"
同時在xsi:schemaLocation加入xsd的定義:mongodb

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

mongo-client

<mongo:mongo-client id="mongoClient"  host="${mongo.host}" port="${mongo.port}">

host是mongodb服務器的地址,默認127.0.0.1;port是mongodb的服務器端口號,默認是27017。
若是須要認證,在1.7版本後須要這樣寫:數據庫

<mongo:mongo-client id="mongoClient"  host="${mongo.host}" port="${mongo.port}" credentials="${mongo.user}:${mongo.pwd}@${mongo.defaultDbName}">

credentials的配置形式是:用戶名:密碼@默認數據庫api

client-options

<mongo:client-options
    connections-per-host="${mongo.connectionsPerHost}"
    min-connections-per-host="${mongo.minConnectionsPerHost}"
    threads-allowed-to-block-for-connection-multiplier="${mongo.threadsAllowedToBlockForConnectionMultiplier}"
    connect-timeout="${mongo.connectTimeout}"
    max-wait-time="${mongo.maxWaitTime}"
    socket-keep-alive="${mongo.socketKeepAlive}"
    socket-timeout="${mongo.socketTimeout}"
    description="${mongo.description}"
    max-connection-idle-time="${mongo.maxConnectionIdleTime}"
    max-connection-life-time="${mongo.maxConnectionLifeTime}"
    heartbeat-socket-timeout="${mongo.heartbeatSocketTimeout}"
    heartbeat-connect-timeout="${mongo.heartbeatConnectTimeout}"
    min-heartbeat-frequency="${mongo.minHeartbeatFrequency}"
    heartbeat-frequency="${mongo.heartbeatFrequency}"

/>

1.7版本+不支持mongo,支持mongo-client,options爲client-options,若是使用mongo而且使用useCredentials,則會出現Usage of 'UserCredentials' with 'MongoClient' is no longer supported提示,編譯出錯。
根據某些教程甚至是官網也能看到下面這種認證配置,可是經測試在1.8的版本中不起任何做用。服務器

credentials="mongodb://${mongo.user}:${mongo.pwd}@${mongo.host}:${mongo.port}/${mongo.defaultDbName}"

mongoDbFactory

<mongo:db-factory id="mongoDbFactory"
                      dbname="${mongo.defaultDbName}"
                      mongo-ref="mongoClient"/>

上面配置中,在1.7之前的版本中,用戶的認證能夠放在這一部分,可是1.7之後就會包上面useCredentials的錯誤提示,因此,若是要認證,就須要將用戶名和密碼等信息放在mongo-clientcredentials字段中。restful

下面給出1.7版本以前的配置:yii2

<mongo:db-factory id="mongoDbFactory"
                      dbname="${mongo.defaultDbName}"
                      host="${mongo.host}"
                      port="${mongo.port}"
                      username="${mongo.user}"
                      password="${mongo.pwd}"
                      mongo-ref="mongoClient"/>

mongoTemplate

mongoTemplate是spring提供的mongodb模板,有兩種配置方式。app

方式1:

<mongo:template id="mongoTemplate" db-factory-ref="mongoDbFactory" write-concern="NORMAL"/>

方式2:

bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
        <constructor-arg ref="mongoDbFactory" />
    </bean>

GridFS Template

MongoDB GridFS Template 支持,操做mongodb存放的文件。

<mongo:mapping-converter id="converter" db-factory-ref="mongoDbFactory" base-package="cn.joyven.web.dao"/>
<mongo:gridFsTemplate id="gridFsTemplcate" db-factory-ref="mongoDbFactory" converter-ref="converter" />

掃描MongoRepository

mongodb bean的倉庫目錄,會自動掃描擴展了MongoRepository接口的接口進行注入。

<mongo:repositories base-package="cn.joyven.web.repository" />

完整的配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       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-2.5.xsd
        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
    ">

   
    <context:annotation-config/>

    <context:component-scan base-package="cn.joyven.web.*"/>

    <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE"/>
        <property name="ignoreResourceNotFound" value="true"/>
        <property name="locations">
            <list>
                <!-- 越靠後越有效,取到最後一個有效的未知 -->
                <value>classpath:conf/properties/*.properties</value>
            </list>
        </property>
    </bean>

    <!-- 1.7版本+不支持mongo,支持mongo-client,options爲client-options -->
    <!-- Usage of 'UserCredentials' with 'MongoClient' is no longer supported -->
    <!-- 配置mongodb鏈接池 ,建立mongoClient實例-->
    <!--credentials="mongodb://${mongo.user}:${mongo.pwd}@${mongo.host}:${mongo.port}/${mongo
    .defaultDbName}"爲何不起做用
    若是須要驗證,mongo-client須要加這句: credentials="${mongo.user}:${mongo.pwd}@${mongo.defaultDbName}"
    -->
    <mongo:mongo-client id="mongoClient"  host="${mongo.host}" port="${mongo.port}">
        <mongo:client-options
                connections-per-host="${mongo.connectionsPerHost}"
                min-connections-per-host="${mongo.minConnectionsPerHost}"
                threads-allowed-to-block-for-connection-multiplier="${mongo.threadsAllowedToBlockForConnectionMultiplier}"
                connect-timeout="${mongo.connectTimeout}"
                max-wait-time="${mongo.maxWaitTime}"
                socket-keep-alive="${mongo.socketKeepAlive}"
                socket-timeout="${mongo.socketTimeout}"
                description="${mongo.description}"
                max-connection-idle-time="${mongo.maxConnectionIdleTime}"
                max-connection-life-time="${mongo.maxConnectionLifeTime}"
                heartbeat-socket-timeout="${mongo.heartbeatSocketTimeout}"
                heartbeat-connect-timeout="${mongo.heartbeatConnectTimeout}"
                min-heartbeat-frequency="${mongo.minHeartbeatFrequency}"
                heartbeat-frequency="${mongo.heartbeatFrequency}"

        />
    </mongo:mongo-client>

    <!-- dbname="${mongo.defaultDbName}" host="${mongo.host}"
                      port="${mongo.port}" username="${mongo.user}" password="${mongo.pwd}"
                      mongo-ref="mongoClient" -->
    <mongo:db-factory id="mongoDbFactory"
                      dbname="${mongo.defaultDbName}"
                      mongo-ref="mongoClient"/>

    <!-- 1.Spring提供的mongodb操做模板-->
    <mongo:template id="mongoTemplate" db-factory-ref="mongoDbFactory" write-concern="NORMAL"/>
    <!-- 2.Spring提供的mongodb操做模板-->
    <!--<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
        <constructor-arg ref="mongoDbFactory" />
    </bean>-->


    <!-- MongoDB GridFS Template 支持,操做mongodb存放的文件 -->
    <mongo:mapping-converter id="converter" db-factory-ref="mongoDbFactory"
                             base-package="cn.idongjia.web.dao"/>
    <mongo:gridFsTemplate id="gridFsTemplcate" db-factory-ref="mongoDbFactory" converter-ref="converter" />

    <!-- mongodb bean的倉庫目錄,會自動掃描擴展了MongoRepository接口的接口進行注入 -->
    <mongo:repositories base-package="cn.joyven.web.repository" />

    <!--激活註解-->
    <bean class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor"/>

</beans>

注意:這裏面的spring的配置並非完整的,至於你須要加載什麼,另行配置。這裏保留了bean和content的配置,主要開啓註解配置須要content,而bean是spring的最基本的粒度,在spring中一切class皆爲bean。

properties配置

mongo.host=127.0.0.1
mongo.port=27017
mongo.defaultDbName=log
mongo.user=joyven
mongo.pwd=123456
mongo.connectionsPerHost=10
mongo.threadsAllowedToBlockForConnectionMultiplier=5
mongo.minConnectionsPerHost=5
#鏈接超時時間
mongo.connectTimeout=10000
#等待時間
mongo.maxWaitTime=120000
#Socket超時時間
mongo.socketTimeout=0
mongo.socketKeepAlive=true

mongo.description=joyven test mongodb database
mongo.maxConnectionIdleTime=1500
mongo.maxConnectionLifeTime=0
#mongo slave
mongo.heartbeatSocketTimeout=1000
mongo.heartbeatConnectTimeout=1500
mongo.minHeartbeatFrequency=5
mongo.heartbeatFrequency=10

配置暫時就說這麼多,等有時間了寫個demo,實現一個restful接口,效果以下:
圖片描述
圖1 restful api
圖片描述圖2 yii2實現的數據展現

相關文章
相關標籤/搜索