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