Spring Data提供其他项目,用来帮助我们使用各种各样的NoSQL技术,包括MongoDB, Neo4J, Elasticsearch, Solr, Redis, Gemfire, Couchbase, Cassandra 和LDAP。
Spring Boot为Redis, MongoDB, Neo4j, Elasticsearch, Solr, Cassandra, Couchbase 和LDAP提供自动配置。也可以充分利用其他项目,但需要自己配置它们,具体查看projects.spring.io/spring-data中相应的参考文档。
Redis
Redis是一个缓存,消息中间件及具有丰富特性的键值存储系统。Spring Boot为Jedis客户端library提供基本的自动配置,Spring Data Redis提供了在它之上的抽象, spring-boot-starter-redis
‘Starter’收集了需要的依赖。
连接Redis
可以注入一个自动配置的 RedisConnectionFactory
, StringRedisTemplate
或普通的 RedisTemplate
实例,或任何其他Spring Bean只要你愿意。默认情况下,这个实例将尝试使用 localhost:6379
连接Redis服务器:
如果添加一个自己的,或任何自动配置类型的 @Bean
,它将替换默认实例(除了 RedisTemplate
的情况,它是根据 bean
的name ‘redisTemplate’而不是类型进行排除的)。如果在classpath路径下存在 commons-pool2
,默认你会获得一个连接池工厂。
MongoDB
连接MongoDB数据库
可以注入一个自动配置的 org.springframework.data.mongodb.MongoDbFactory
来访问Mongo数据库。默认情况下,该实例将尝试使用URL mongodb://localhost/test
连接到MongoDB服务器:
可以设置 spring.data.mongodb.uri
来改变该url,并配置其他的设置,比如副本集:
另外,跟正在使用的Mongo 2.x一样,可以指定 host
/ port
,比如,在 application.properties
中添加以下配置:
Mongo 3.0 Java驱动不支持 spring.data.mongodb.host
和 spring.data.mongodb.port
,对于这种情况, spring.data.mongodb.uri
需要提供全部的配置信息。
如果没有指定 spring.data.mongodb.port
,默认使用 27017
,上述示例中可以删除这行配置。
如果不使用Spring Data Mongo,可以注入 com.mongodb.Mongo
beans 以代替 MongoDbFactory
。
如果想完全控制MongoDB连接的建立过程,可以声明自己的 MongoDbFactory
或 Mongo
bean。
MongoDBTemplate
Spring Data Mongo提供了一个MongoTemplate类,它的设计和Spring的 JdbcTemplate
很相似。跟 JdbcTemplate
一样,Spring Boot会自动配置一个bean,只需简单的注入即可:
具体参考 MongoOperations
Javadoc。
Spring Data MongoDB仓库
Spring Data包含的仓库也支持MongoDB,正如前面讨论的JPA仓库,基于方法名自动创建查询是基本的原则。
实际上,不管是Spring Data JPA还是Spring Data MongoDB都共享相同的基础设施。所以可以使用上面的JPA示例,并假设那个 City
现在是一个Mongo数据类而不是JPA @Entity
,它将以同样的方式工作:
想详细了解Spring Data MongoDB,包括它丰富的对象映射技术,可以查看它的参考文档。
内嵌的Mongo
Spring Boot为内嵌Mongo提供自动配置,需要添加 de.flapdoodle.embed:de.flapdoodle.embed.mongo
依赖才能使用它。spring.data.mongodb.port
属性可用来配置Mongo监听的端口,将该属性值设为0
,表示使用一个随机分配的可用端口。通过 MongoAutoConfiguration
创建的 MongoClient
将自动配置为使用随机分配的端口。如果classpath下存在SLF4J依赖,Mongo产生的输出将自动路由到一个名为 org.springframework.boot.autoconfigure.mongo.embedded.EmbeddedMongo
的logger。想要完全控制Mongo实例的配置和日志路由,可以声明自己的 IMongodConfig
和 IRuntimeConfig
beans。
实验
本实验基于内嵌MongoDB数据库进行。
创建一个Maven项目
pom.xml
application.yml
City.java
Country.java
CityController.java
CountryController.java
CountryRepository.java
App.java
项目结构
运行结果
第一次启动的时候会从http://downloads.mongodb.org/win32/mongodb-win32-x86_64-2008plus-3.2.2.zip
下载MongoDB的相关实例。
参考资料
Spring Boot Reference Guide : http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/