2020-05-29 14:57:51 +02:00
2020-05-06 22:29:46 +02:00
2019-07-19 23:58:43 +02:00
2019-10-02 16:26:35 +02:00
2019-04-02 09:19:26 +02:00
2019-04-02 09:19:26 +02:00
2020-05-29 14:57:51 +02:00
2020-05-29 14:57:51 +02:00

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
= Spring Data Neo4j⚡RX
:sectanchors:

// tag::properties[]
:groupId: org.neo4j.springframework.data
:artifactId: spring-data-neo4j-rx
:artifactIdStarter: spring-data-neo4j-rx-spring-boot-starter

:neo4j-version: 4.0.4
:spring-boot-version: 2.3.0.RELEASE
:spring-data-neo4j-rx-version: 1.1.0
// end::properties[]

image:https://img.shields.io/maven-central/v/org.neo4j.springframework.data/spring-data-neo4j-rx.svg[Maven Central,link=http://search.maven.org/#search%7Cga%7C1%7Cg%3A%22org.neo4j.springframework.data%22%20AND%20a%3A%22spring-data-neo4j-rx%22]

[abstract]
--
Spring Data Neo4j⚡RX - or in short _SDN/RX_ - is an ongoing effort to create the next generation of Spring Data Neo4j, with full reactive support and lightweight mapping.
SDN/RX will work with immutable entities, regardless whether written in Java or Kotlin.
--

The primary goal of the https://projects.spring.io/spring-data[Spring Data] project is to make it easier to build Spring-powered applications that use new data access technologies such as non-relational databases, map-reduce frameworks, and cloud based data services.

The SDN/RX project aims to provide a familiar and consistent Spring-based programming model for integrating with the https://neo4j.com/[Neo4j] Graph Database.

== Manual

For a gentle introduction and some getting started guides, please use our
https://neo4j.github.io/sdn-rx[Manual].

== Getting Started

Here is a quick teaser of a reactive application using Spring Data Repositories in Java:

[source,java]
----
@Node
public class Person {
    private Long id;
    private String name;

    public Person(String name) {
        this.name = name;
    }
}

@Repository
interface PersonRepository extends ReactiveNeo4jRepository<Person, Long> {

    Flux<Person> findAllByName(String name);

    Flux<Person> findAllByNameLike(String name);
}

@Service
class MyService {

    @Autowired
    private final PersonRepository repository;

    @Transactional
    public Flux<Person> doWork() {

        Person emil = new Person("Emil");
        Person gerrit = new Person("Gerrit");
        Person michael = new Person("Michael");

        // Persist entities and relationships to graph database
        return repository.saveAll(Flux.just(emil, gerrit, michael));
    }
}
----

TIP: SDN/RX is not only about reactive support, all features are available in both ways: Imperative and reactive, we
     only prefer to showcase the new reactive database access support here.

=== Maven configuration

==== With Spring Boot

If you are on https://spring.io/projects/spring-boot[Spring Boot], all you have to do is to add our starter:

[source,xml,subs="verbatim,attributes"]
----
<dependency>
	<groupId>{groupId}</groupId>
	<artifactId>{artifactIdStarter}</artifactId>
	<version>{spring-data-neo4j-rx-version}</version>
</dependency>
----

and configure your database connection:

[source,properties]
----
org.neo4j.driver.uri=bolt://localhost:7687
org.neo4j.driver.authentication.username=neo4j
org.neo4j.driver.authentication.password=secret
----

Please have a look at our https://neo4j.github.io/sdn-rx[manual] for an overview about the architecture, how to define
mappings and more.

==== Without Spring Boot

If you are using a plain Spring Framework project without Spring Boot, please add this Maven dependency:

[source,xml,subs="verbatim,attributes"]
----
<dependency>
	<groupId>{groupId}</groupId>
	<artifactId>{artifactId}</artifactId>
	<version>{spring-data-neo4j-rx-version}</version>
</dependency>
----

and configure SDN/RX for reactive database access like this:

[source,java]
----
@Configuration
@EnableReactiveNeo4jRepositories
@EnableTransactionManagement
class MyConfiguration extends AbstractReactiveNeo4jConfig {

    @Bean
    public Driver driver() {
        return GraphDatabase.driver("bolt://localhost:7687", AuthTokens.basic("neo4j", "secret"));
    }

    @Override
    protected Collection<String> getMappingBasePackages() {
        return Collections.singletonList(Person.class.getPackage().getName());
    }
}
----

The imperative version looks pretty much the same but uses `EnableNeo4jRepositories`  and `AbstractNeo4jConfig`.

IMPORTANT: We recommend Spring Boot, the automatic configuration and especially the dependency management
           through the Starters in contrast to the manual work of managing dependencies and configuration.
           +
           Please consult our https://neo4j.github.io/sdn-rx[manual] for more information.

=== Building SDN/RX

Please have a look at the documentation: https://neo4j.github.io/sdn-rx/current/#building-sdn-rx[Building SDN/RX].
Description
No description provided
Readme 35 MiB
Languages
Java 96.4%
CSS 2.2%
AspectJ 0.8%
HTML 0.4%