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