MongoDB 是一個基於分佈式文件存儲的數據庫。由 C++ 語言編寫。旨在爲 WEB 應用提供可擴展的高性能數據存儲解決方案。
MongoDB 是一個介於關係數據庫和非關係數據庫之間的產品,是非關係數據庫當中功能最豐富,最像關係數據庫的。javaMongoDB 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提供的java api包是:org.mongodb:mongo-java-driver
與spring整合,則須要引入另外一個包:org.springframework.data:spring-data-mongodb
spring
//mongodb compile 'org.springframework.data:spring-data-mongodb:1.8.0.RELEASE' compile 'org.mongodb:mongo-java-driver:3.1.0'
<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>
在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: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
<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}"
<mongo:db-factory id="mongoDbFactory" dbname="${mongo.defaultDbName}" mongo-ref="mongoClient"/>
上面配置中,在1.7之前的版本中,用戶的認證能夠放在這一部分,可是1.7之後就會包上面useCredentials的錯誤提示,因此,若是要認證,就須要將用戶名和密碼等信息放在mongo-client
的credentials
字段中。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是spring提供的mongodb模板,有兩種配置方式。app
<mongo:template id="mongoTemplate" db-factory-ref="mongoDbFactory" write-concern="NORMAL"/>
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.joyven.web.dao"/> <mongo:gridFsTemplate id="gridFsTemplcate" db-factory-ref="mongoDbFactory" converter-ref="converter" />
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。
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實現的數據展現