diff --git a/spring-boot-project/spring-boot-docs/src/main/asciidoc/spring-boot-features.adoc b/spring-boot-project/spring-boot-docs/src/main/asciidoc/spring-boot-features.adoc index 9480f05f90..7b7fec9ef2 100644 --- a/spring-boot-project/spring-boot-docs/src/main/asciidoc/spring-boot-features.adoc +++ b/spring-boot-project/spring-boot-docs/src/main/asciidoc/spring-boot-features.adoc @@ -3554,7 +3554,7 @@ considered. A typical entity class resembles the following example: public City(String name, String state) { this.name = name; - this.country = country; + this.state = state; } public String getName() { @@ -3606,7 +3606,7 @@ The following example shows a typical Spring Data repository interface definitio Page findAll(Pageable pageable); - City findByNameAndCountryAllIgnoringCase(String name, String country); + City findByNameAndStateAllIgnoringCase(String name, String state); } ---- @@ -4006,7 +4006,7 @@ in the following example: Page findAll(Pageable pageable); - City findByNameAndCountryAllIgnoringCase(String name, String country); + City findByNameAndStateAllIgnoringCase(String name, String state); } ---- @@ -4045,29 +4045,28 @@ the Mongo instance's configuration and logging routing. [[boot-features-neo4j]] === Neo4j http://neo4j.com/[Neo4j] is an open-source NoSQL graph database that uses a rich data -model of nodes related by first class relationships, which is better suited for connected -big data than traditional rdbms approaches. Spring Boot offers several conveniences for +model of nodes connected by first class relationships, which is better suited for connected +big data than traditional RDBMS approaches. Spring Boot offers several conveniences for working with Neo4j, including the `spring-boot-starter-data-neo4j` "`Starter`". [[boot-features-connecting-to-neo4j]] ==== Connecting to a Neo4j Database -You can inject an auto-configured `Neo4jSession`, `Session`, or `Neo4jOperations` -instance as you would any other Spring Bean. By default, the instance tries to connect to -a Neo4j server at `localhost:7474`. The following example shows how to inject a Neo4j -bean: +To access a Neo4j server, you can inject an auto-configured `org.neo4j.ogm.session.Session`. +By default, the instance tries to connect to a Neo4j server at `localhost:7687` via the Bolt +protocol. The following example shows how to inject a Neo4j session: [source,java,indent=0] ---- @Component public class MyBean { - private final Neo4jTemplate neo4jTemplate; + private final Session session; @Autowired - public MyBean(Neo4jTemplate neo4jTemplate) { - this.neo4jTemplate = neo4jTemplate; + public MyBean(Session session) { + this.session = session; } // ... @@ -4075,20 +4074,20 @@ bean: } ---- -You can take full control of the configuration by adding a -`org.neo4j.ogm.config.Configuration` `@Bean` of your own. Also, adding a `@Bean` of type -`Neo4jOperations` disables the auto-configuration. - -You can configure the user and credentials to use by setting the `spring.data.neo4j.*` +You can configure the uri and credentials to use by setting the `spring.data.neo4j.*` properties, as shown in the following example: [source,properties,indent=0] ---- - spring.data.neo4j.uri=http://my-server:7474 + spring.data.neo4j.uri=bolt://my-server:7687 spring.data.neo4j.username=neo4j spring.data.neo4j.password=secret ---- +You can take full control over the session creation by adding a +`org.neo4j.ogm.config.Configuration` `@Bean`. To completely disable the auto-configuration +provided by the "`Starter`" , add a `@Bean` of type `org.neo4j.ogm.session.SessionFactory`. + [[boot-features-connecting-to-neo4j-embedded]] @@ -4096,23 +4095,31 @@ properties, as shown in the following example: If you add `org.neo4j:neo4j-ogm-embedded-driver` to the dependencies of your application, Spring Boot automatically configures an in-process embedded instance of Neo4j that does -not persist any data when your application shuts down. You can explicitly disable that -mode by setting `spring.data.neo4j.embedded.enabled=false`. You can also enable -persistence for the embedded mode by providing a path to a database file, as shown in the -following example: - ----- - spring.data.neo4j.uri=file://var/tmp/graph.db ----- +not persist any data when your application shuts down. [NOTE] ==== -The Neo4j OGM embedded driver does not provide the Neo4j kernel. Users are expected to -provide this dependency manually. See -http://neo4j.com/docs/ogm-manual/current/reference/#reference:getting-started[the -documentation] for more details. +As the embedded Neo4j OGM driver does not provide the Neo4j kernel itself, you have +to declare `org.neo4j:neo4j` as dependency yourself. Refer to +https://neo4j.com/docs/ogm-manual/current/reference/#reference:getting-started[the +Neo4j OGM documentation] for list of compatible versions. ==== +The embedded driver takes precedence over the other drivers when there are multiple +drivers on the classpath. You can explicitly disable the embedded mode by setting +`spring.data.neo4j.embedded.enabled=false`. + +<> +automatically make use of an embedded Neo4j instance if the embedded driver and Neo4j +kernel are on the classpath as described above. + +[NOTE] +==== +You can enable persistence for the embedded mode by providing a path to a database file +in your configuration like this: `spring.data.neo4j.uri=file://var/tmp/graph.db`. +==== + + [[boot-features-neo4j-ogm-session]] ==== Neo4jSession @@ -4133,44 +4140,34 @@ pattern). If you do not want this behavior, add the following line to your ==== Spring Data Neo4j Repositories Spring Data includes repository support for Neo4j. -In fact, both Spring Data JPA and Spring Data Neo4j share the same common infrastructure. -You could take the JPA example from earlier and, assuming that `City` is now a Neo4j OGM -`@NodeEntity` rather than a JPA `@Entity`, it works in the same way. - -TIP: You can customize entity scanning locations by using the `@EntityScan` annotation. - -To enable repository support (and optionally support for `@Transactional`), add the -following two annotations to your Spring configuration: - -[source,java,indent=0] ----- - @EnableNeo4jRepositories(basePackages = "com.example.myapp.repository") - @EnableTransactionManagement ----- - -==== Repository Example - -The following example shows an interface definition for a Neo4j repository: +Spring Data Neo4j shares the common infrastructure with Spring Data JPA as many other +Spring Data modules do. You could take the JPA example from earlier and define +`City` as Neo4j OGM `@NodeEntity` rather than JPA `@Entity` and the repository +abstraction works in the same way, as shown in the following example: [source,java,indent=0] ---- package com.example.myapp.domain; - import org.springframework.data.domain.*; - import org.springframework.data.repository.*; + import java.util.Optional; - public interface CityRepository extends GraphRepository { + import org.springframework.data.neo4j.repository.*; - Page findAll(Pageable pageable); + public interface CityRepository extends Neo4jRepository { - City findByNameAndCountry(String name, String country); + Optional findOneByNameAndState(String name, String state); } ---- -TIP: For complete details of Spring Data Neo4j, including its rich object mapping -technologies, refer to the https://projects.spring.io/spring-data-neo4j/[reference -documentation]. +The `spring-boot-starter-data-neo4j` "`Starter`" enables the repository support as well +as transaction management. You can customize the locations to look for repositories and +entities by using `@EnableNeo4jRepositories` and `@EntityScan` respectively on a +`@Configuration`-bean. + +TIP: For complete details of Spring Data Neo4j, including its object mapping +technologies, refer to the https://projects.spring.io/spring-data-neo4j/[project page] and +the reference documentation.