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