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)
}
}
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ