Neo4j es una base de datos de gráficos NoSQL de código abierto que utiliza un modelo de datos con todas las funciones de nodos conectados por relaciones completas, que es más adecuado para big data vinculados que los enfoques RDBMS tradicionales. Spring Boot proporciona varios asistentes para trabajar con Neo4j, incluido un spring-boot-starter-data-neo4j "inicial".

Conectarse a la base de datos Neo4j

Para acceder al servidor Neo4j, puede implementar el org.neo4j.driver.Driver autoconfigurable. De forma predeterminada, la instancia intentará conectarse al servidor Neo4j en localhost:7687 utilizando el protocolo Bolt. El siguiente ejemplo muestra cómo implementar un Driver para Neo4j, que dará acceso, entre otras cosas, a Session:

Java
importar org.neo4j.driver.Driver;
importar org.neo4j.driver.Session;
importar org.neo4j.driver.Values;
importar org.springframework.stereotype.Component;
@Componente
clase pública MyBean {
    Conductor final privado; conductor;
    público MyBean (controlador) {
        this.driver = conductor;
    }
 // ...
 public String someMethod(String mensaje) {
        intentar (sesión sesión = this.driver.session()) {
            return session.writeTransaction((transacción) -> transacción
                    .run("CREATE (a:Saludo) SET a.message = $message RETURN a.message + ', from node ' + id(a)",
                            Valores.parametros("mensaje", mensaje))
                    .single().get(0).asString());
        }
    }
}
Kotlin
importar org.neo4j.driver.Driver
importar org.neo4j.driver.Transaction
importar org.neo4j.driver.Values
importar org.springframework.stereotype.Component
@Componente
clase MyBean (controlador de valor privado: Controlador) {
 // ...
 fun someMethod(message: String?): String {
        driver.session().use { sesión ->
            return@someMethod session.writeTransaction { transacción: Transacción ->
                transacción.run(
                    "CREAR (a:Saludo) SET a.message = \$message RETURN a.message + ', del nodo ' + id(a)",
                    Valores.parametros("mensaje", mensaje)
                ).single()[0].asString()
            }
        }
    }
}

Puede agregar varios aspectos del controlador a la configuración utilizando las propiedades spring.neo4j.*. El siguiente ejemplo muestra cómo configurar el URI y las credenciales a utilizar:

Propiedades
spring.neo4j.uri=bolt://mi-servidor:7687
spring.neo4j.authentication.nombre de usuario = neo4j
spring.neo4j.authentication.password=secret
Yaml
primavera:
  neo4j:
    uri: "perno://mi-servidor:7687"
    autenticación:
      nombre de usuario: "neo4j"
      contraseña: "secreta"

El controlador autoconfigurable se crea utilizando ConfigBuilder. Para ajustar su configuración, declare uno o más beans ConfigBuilderCustomizer. Cada uno de ellos será llamado en orden a través del ConfigBuilder, que se utiliza para crear el Driver.

Repositorios Spring Data Neo4j

Spring Data contiene soporte de repositorio para Neo4j.

Spring Data Neo4j comparte la infraestructura Spring Data JPA, al igual que muchos otros módulos Spring Data. Puede tomar el ejemplo de JPA de la sección anterior y definir City como @Node para Spring Data Neo4j en lugar de @Entity para JPA, mientras abstrae el almacenamiento funcionará exactamente como se muestra en el siguiente ejemplo:

Java
import java.util.Optional;
importar org.springframework.data.neo4j.repository.Neo4jRepository;
interfaz pública CityRepository extiende Neo4jRepository<City, Long> {
    Opcional<Ciudad> findOneByNameAndState (nombre de cadena, estado de cadena);
}
Kotlin
importar org.springframework.data.neo4j.repository.Neo4jRepository
importar java.util.Opcional
interfaz CityRepository: Neo4jRepository<Ciudad?, ¿Larga?> {
    divertido findOneByNameAndState(nombre: ¿Cadena?, estado: ¿Cadena?): Opcional<Ciudad?>?
}

"Starter" spring-boot-starter-data-neo4j permite la compatibilidad con repositorios, así como la gestión de transacciones. Spring Boot admite repositorios Neo4j clásicos y reactivos a través de los beans Neo4jTemplate o ReactiveNeo4jTemplate. Si Project Reactor está disponible en el classpath, el estilo reactivo también se configura automáticamente.

Puede configurar las ubicaciones donde se buscarán repositorios y entidades usando las anotaciones @EnableNeo4jRepositories y @EntityScan, respectivamente, en un bean marcado con @ Configuración código de anotación>.

En una aplicación que utiliza el estilo reactivo, ReactiveTransactionManager no se configura automáticamente. Para habilitar la gestión de transacciones, se debe definir el siguiente bean en la configuración:

Java
importar org.neo4j.driver.Driver;
importar org.springframework.context.annotation.Bean;
importar org.springframework.context.annotation.Configuration;
importar org.springframework.data.neo4j.core.ReactiveDatabaseSelectionProvider;
importar org.springframework.data.neo4j.core.transaction.ReactiveNeo4jTransactionManager;
@Configuration(proxyBeanMethods = false)
clase pública MyNeo4jConfiguration {
    @Frijol
    público ReactiveNeo4jTransactionManager reactiveTransactionManager (controlador,
            ReactiveDatabaseSelectionProvider nombre de la base de datosProvider) {
        devolver nuevo ReactiveNeo4jTransactionManager (controlador, proveedor de nombre de base de datos);
    }
}
Kotlin
importar org.neo4j.driver.Driver
importar org.springframework.context.annotation.Bean
importar org.springframework.context.annotation.Configuration
importar org.springframework.data.neo4j.core.ReactiveDatabaseSelectionProvider
importar org.springframework.data.neo4j.core.transaction.ReactiveNeo4jTransactionManager
@Configuration(proxyBeanMethods = false)
clase MyNeo4jConfiguration {
    @Frijol
    divertido reactivoTransactionManager(controlador: Controlador,
            proveedor de nombre de base de datos: ReactiveDatabaseSelectionProvider): ReactiveNeo4jTransactionManager {
        devolver ReactiveNeo4jTransactionManager (controlador, proveedor de nombre de base de datos)
    }
}