Neo4j – это графовая база данных NoSQL с открытым исходным кодом, которая использует полнофункциональную модель данных узлов, связанных полноправными отношениями, что лучше подходит для связанных больших данных, чем традиционные подходы с использованием РСУБД. Spring Boot предусматривает несколько вспомогательных средств для работы с Neo4j, включая "стартер" spring-boot-starter-data-neo4j
.
Подключение к базе данных Neo4j
Чтобы получить доступ к серверу Neo4j, можно внедрить автоконфигурируемый org.neo4j.driver.Driver
. По умолчанию экземпляр будет пытаться подключиться к серверу Neo4j по адресу localhost:7687
, используя протокол Bolt. В следующем примере показано, как внедрить Driver
для Neo4j, который даст доступ, помимо всего прочего, к Session
:
@Component public class MyBean { private final Driver driver; public MyBean(Driver driver) { this.driver = driver; } }
@Component class MyBean(private val driver: Driver) { }
Можно добавить в конфигурацию различные аспекты драйвера с помощью свойств spring.neo4j.*
. В следующем примере показано, как сконфигурировать используемые URI-идентификатор и учетные данные:
spring.neo4j.uri=bolt://my-server:7687
spring.neo4j.authentication.username=neo4j
spring.neo4j.authentication.password=secret
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, при этом абстракция хранилища будет работать точно так же, как показано в следующем примере:
public interface CityRepository extends Neo4jRepository<City, Long> { Optional<City> findOneByNameAndState(String name, String state); }
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
автоматически не конфигурируется. Чтобы активировать управление транзакциями, в конфигурации должен быть определен следующий бин:
@Configuration(proxyBeanMethods = false) public class MyNeo4jConfiguration { @Bean public ReactiveNeo4jTransactionManager reactiveTransactionManager(Driver driver, ReactiveDatabaseSelectionProvider databaseNameProvider) { return new ReactiveNeo4jTransactionManager(driver, databaseNameProvider); } }
@Configuration(proxyBeanMethods = false) class MyNeo4jConfiguration { @Bean fun reactiveTransactionManager(driver: Driver, databaseNameProvider: ReactiveDatabaseSelectionProvider): ReactiveNeo4jTransactionManager { return ReactiveNeo4jTransactionManager(driver, databaseNameProvider) } }
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ