Spring Data provides additional projects that help you access a variety of NoSQL technologies including MongoDB, Neo4J, Elasticsearch, Solr, Redis, Gemfire, Couchbase and Cassandra. Spring Boot provides auto-configuration for Redis, MongoDB, Elasticsearch, and Solr; you can make use of the other projects, but you will need to configure them yourself. Refer to the appropriate reference documentation at projects.spring.io/spring-data.
Redis is a cache, message broker and richly-featured key-value store.
Spring Boot offers basic auto-configuration for the
Jedis client library and abstractions on top of it
provided by Spring Data Redis. There
is a spring-boot-starter-redis ‘Starter POM’ for collecting the dependencies in a
convenient way.
You can inject an auto-configured RedisConnectionFactory, StringRedisTemplate or
vanilla RedisTemplate instance as you would any other Spring Bean. By default the
instance will attempt to connect to a Redis server using localhost:6379:
@Component public class MyBean { private StringRedisTemplate template; @Autowired public MyBean(StringRedisTemplate template) { this.template = template; } // ... }
If you add a @Bean of your own of any of the auto-configured types it will replace the
default (except in the case of RedisTemplate the exclusion is based on the bean name
‘redisTemplate’ not its type). If commons-pool2 is on the classpath you will get a
pooled connection factory by default.
MongoDB is an open-source NoSQL document database that uses a
JSON-like schema instead of traditional table-based relational data. Spring Boot offers
several conveniences for working with MongoDB, including the
spring-boot-starter-data-mongodb ‘Starter POM’.
You can inject an auto-configured org.springframework.data.mongodb.MongoDbFactory to
access Mongo databases. By default the instance will attempt to connect to a MongoDB
server using the URL mongodb://localhost/test:
import org.springframework.data.mongodb.MongoDbFactory; import com.mongodb.DB; @Component public class MyBean { private final MongoDbFactory mongo; @Autowired public MyBean(MongoDbFactory mongo) { this.mongo = mongo; } // ... public void example() { DB db = mongo.getDb(); // ... } }
You can set spring.data.mongodb.uri property to change the url, or alternatively
specify a host/port. For example, you might declare the following in your
application.properties:
spring.data.mongodb.host=mongoserver spring.data.mongodb.port=27017
![]() | Tip |
|---|---|
If |
![]() | Tip |
|---|---|
If you aren’t using Spring Data Mongo you can inject |
You can also declare your own MongoDbFactory or Mongo bean if you want to take
complete control of establishing the MongoDB connection.
Spring Data Mongo provides a
MongoTemplate class that is very
similar in its design to Spring’s JdbcTemplate. As with JdbcTemplate Spring Boot
auto-configures a bean for you to simply inject:
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.stereotype.Component; @Component public class MyBean { private final MongoTemplate mongoTemplate; @Autowired public MyBean(MongoTemplate mongoTemplate) { this.mongoTemplate = mongoTemplate; } // ... }
See the MongoOperations Javadoc for complete details.
Spring Data includes repository support for MongoDB. As with the JPA repositories discussed earlier, the basic principle is that queries are constructed for you automatically based on method names.
In fact, both Spring Data JPA and Spring Data MongoDB share the same common
infrastructure; so you could take the JPA example from earlier and, assuming that City
is now a Mongo data class rather than a JPA @Entity, it will work in the same way.
package com.example.myapp.domain; import org.springframework.data.domain.*; import org.springframework.data.repository.*; public interface CityRepository extends Repository<City, Long> { Page<City> findAll(Pageable pageable); City findByNameAndCountryAllIgnoringCase(String name, String country); }
![]() | Tip |
|---|---|
For complete details of Spring Data MongoDB, including its rich object mapping technologies, refer to their reference documentation. |
Spring Data Gemfire provides
convenient Spring-friendly tools for accessing the
Pivotal Gemfire data management
platform. There is a spring-boot-starter-data-gemfire ‘Starter POM’ for collecting the
dependencies in a convenient way. There is currently no auto-configuration support for
Gemfire, but you can enable Spring Data Repositories with a
single annotation (@EnableGemfireRepositories).
Apache Solr is a search engine. Spring Boot offers basic
auto-configuration for the Solr client library and abstractions on top of it provided by
Spring Data Solr. There is
a spring-boot-starter-data-solr ‘Starter POM’ for collecting the dependencies in a
convenient way.
You can inject an auto-configured SolrServer instance as you would any other Spring
bean. By default the instance will attempt to connect to a server using
localhost:8983/solr:
@Component public class MyBean { private SolrServer solr; @Autowired public MyBean(SolrServer solr) { this.solr = solr; } // ... }
If you add a @Bean of your own of type SolrServer it will replace the default.
Spring Data includes repository support for Apache Solr. As with the JPA repositories discussed earlier, the basic principle is that queries are constructed for you automatically based on method names.
In fact, both Spring Data JPA and Spring Data Solr share the same common infrastructure;
so you could take the JPA example from earlier and, assuming that City is now a
@SolrDocument class rather than a JPA @Entity, it will work in the same way.
![]() | Tip |
|---|---|
For complete details of Spring Data Solr, refer to their reference documentation. |
Elasticsearch is an open source, distributed,
real-time search and analytics engine. Spring Boot offers basic auto-configuration for
the Elasticsearch and abstractions on top of it provided by
Spring Data Elasticsearch.
There is a spring-boot-starter-data-elasticsearch ‘Starter POM’ for collecting the
dependencies in a convenient way.
You can inject an auto-configured ElasticsearchTemplate or Elasticsearch Client
instance as you would any other Spring Bean. By default the instance will attempt to
connect to a local in-memory server (a NodeClient in Elasticsearch terms), but you can
switch to a remote server (i.e. a TransportClient) by setting
spring.data.elasticsearch.cluster-nodes to a comma-separated ‘host:port’ list.
@Component public class MyBean { private ElasticsearchTemplate template; @Autowired public MyBean(ElasticsearchTemplate template) { this.template = template; } // ... }
If you add a @Bean of your own of type ElasticsearchTemplate it will replace the
default.
Spring Data includes repository support for Elasticsearch. As with the JPA repositories discussed earlier, the basic principle is that queries are constructed for you automatically based on method names.
In fact, both Spring Data JPA and Spring Data Elasticsearch share the same common
infrastructure; so you could take the JPA example from earlier and, assuming that
City is now an Elasticsearch @Document class rather than a JPA @Entity, it will
work in the same way.
![]() | Tip |
|---|---|
For complete details of Spring Data Elasticsearch, refer to their reference documentation. |