Neo4j

Модуль 5. Spring
Рівень 17 , Лекція 6
Відкрита

Neo4j — це графова база даних NoSQL з відкритим вихідним кодом, яка використовує повнофункціональну модель даних вузлів, пов'язаних повноправними відносинами, що краще підходить для пов'язаних великих даних, ніж традиційні підходи з використанням РСУБД. Spring Boot передбачає кілька допоміжних засобів для роботи з Neo4j, включно зі "стартером" spring-boot-starter-data-neo4j.

Підключення до бази даних Neo4j

Щоб отримати доступ до сервера Neo4j, можна впровадити автоконфігурований org.neo4j.driver.Driver. За замовчуванням екземпляр намагатиметься підключитися до сервера Neo4j за адресою localhost:7687, використовуючи протокол Bolt. У наступному прикладі показано, як впровадити Driver для Neo4j, який дасть доступ, окрім іншого, до Session:

Java
import org.neo4j.driver.Driver; import org.neo4j.driver.Session; import org.neo4j.driver.Values; import org.springframework.stereotype.Component; @Component public class MyBean { private final Driver driver; public MyBean(Driver driver) { this.driver = driver; }  // ...  public String someMethod(String message) { try (Session session = this.driver.session()) { return session.writeTransaction((transaction) -> transaction .run("CREATE (a:Greeting) SET a.message = $message RETURN a.message + ', від node ' + id(a)", Values.parameters("message", message)) .single().get(0).asString()); } } } 
Kotlin
import org.neo4j.driver.Driver import org.neo4j.driver.Transaction import org.neo4j.driver.Values import org.springframework.stereotype.Component @Component class MyBean(private val driver: Driver) {  // ...  fun someMethod(message: String?): String { driver.session().use { session -> return@someMethod session.writeTransaction { transaction: Transaction -> transaction.run( "CREATE (a:Greeting) SET a.message = \$message RETURN a.message + ', від node ' + id(a)", Values.parameters("message", message) ).single()[0].asString() } } } } 

Можна додати різні аспекти драйвера до конфігурації за допомогою властивостей spring.neo4j.*. У наступному прикладі показано, як налаштувати URI-ідентифікатор і облікові дані:

Properties
spring.neo4j.uri=bolt://my-server:7687
spring.neo4j.authentication.username=neo4j
spring.neo4j.authentication.password=secret
Yaml
spring:
  neo4j:
    uri: "bolt://my-server:7687"
    authentication:
      username: "neo4j"
      password: "secret"

Автоконфігурований Driver створюється за допомогою ConfigBuilder. Для більш тонкого налаштування конфігурації оголоси один або кілька бінів ConfigBuilderCustomizer. Кожен з них буде викликатись по порядку через ConfigBuilder, який використовується для створення Driver.

Репозиторії Spring Data Neo4j

Spring Data містить засоби підтримки репозиторіїв для Neo4j.

Spring Data Neo4j має спільну з Spring Data JPA інфраструктуру, як і багато інших модулів Spring Data. Можна взяти приклад для JPA з попереднього розділу та визначити City як @Node для Spring Data Neo4j, а не @Entity для JPA, при цьому абстракція сховища працюватиме так само, як показано в наступному прикладі:

Java
import java.util.Optional; import org.springframework.data.neo4j.repository.Neo4jRepository; public interface CityRepository extends Neo4jRepository<City, Long> { Optional<City> findOneByNameAndState(String name, String state); } 
Kotlin
import org.springframework.data.neo4j.repository.Neo4jRepository import java.util.Optional interface CityRepository : Neo4jRepository<City?, Long?> { fun findOneByNameAndState(name: String?, state: String?): Optional<City?>? } 

"Стартер" spring-boot-starter-data-neo4j активує підтримку репозиторіїв, а також управління транзакціями. Spring Boot підтримує як класичні, так і реактивні репозиторії Neo4j через біни Neo4jTemplate або ReactiveNeo4jTemplate. Якщо Project Reactor доступний у classpath, реактивний стиль також автоматично конфігурується.

Можна налаштувати розташування, в яких буде здійснюватися пошук репозиторіїв та сутностей, використовуючи анотацію @EnableNeo4jRepositories та @EntityScan відповідно на біні, позначеному анотацією @Configuration.

У програмі, яка використовує реактивний стиль, ReactiveTransactionManager автоматично не конфігурується. Щоб активувати керування транзакціями, у конфігурації має бути визначений наступний бін:

Java
import org.neo4j.driver.Driver; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.neo4j.core.ReactiveDatabaseSelectionProvider; import org.springframework.data.neo4j.core.transaction.ReactiveNeo4jTransactionManager; @Configuration(proxyBeanMethods = false) public class MyNeo4jConfiguration { @Bean public ReactiveNeo4jTransactionManager reactiveTransactionManager(Driver driver, ReactiveDatabaseSelectionProvider databaseNameProvider) { return new ReactiveNeo4jTransactionManager(driver, databaseNameProvider); } } 
Kotlin
import org.neo4j.driver.Driver import org.springframework.context.annotation.Bean import org.springframework.context.annotation.Configuration import org.springframework.data.neo4j.core.ReactiveDatabaseSelectionProvider import org.springframework.data.neo4j.core.transaction.ReactiveNeo4jTransactionManager @Configuration(proxyBeanMethods = false) class MyNeo4jConfiguration { @Bean fun reactiveTransactionManager(driver: Driver, databaseNameProvider: ReactiveDatabaseSelectionProvider): ReactiveNeo4jTransactionManager { return ReactiveNeo4jTransactionManager(driver, databaseNameProvider) } } 
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ