Reactive Neo4j

Learn about nonblocking access to Neo4j using reactive programming with Spring Data Neo4j.

We'll cover the following...

Reactive programming in Spring Data Neo4j enables asynchronous, nonblocking interactions with the Neo4j graph database. It utilizes reactive streams and the Reactor project to handle data in a more scalable and efficient manner, allowing better support for concurrent and reactive applications.

Quick setup

First, we should add the spring-boot-starter-webflux Spring Boot starter data dependency to the build.gradle file to enable reactive programming support with Spring Data Neo4j.

plugins {
id 'java'
id 'org.springframework.boot' version '3.0.2'
id 'io.spring.dependency-management' version '1.1.0'
}
group = 'com.smartdiscover'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '17'
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-neo4j'
implementation 'org.springframework.boot:spring-boot-starter-webflux'
implementation 'org.projectlombok:lombok:1.18.26'
annotationProcessor 'org.projectlombok:lombok'
}

The ReactiveNeo4jRepository interface

The ReactiveNeo4jRepository interface comes with the Spring Data Neo4j framework for reactive programming, extending interfaces like ReactiveSortingRepository, ReactiveQueryByExampleExecutor, and ReactiveCrudRepository.

public interface ReactiveNeo4jRepository<T, ID>
extends ReactiveSortingRepository<T, ID>, ReactiveQueryByExampleExecutor<T>, ReactiveCrudRepository<T, ID> {}

The ReactiveAuthorRepository interface

Now, let’s create the ReactiveAuthorRepository interface in the com.smartdiscover.repository package, extending the ...