Почему для Neo4j OGM с Spring Boot 2.0.0.M4, очевидно, требуется встроенный драйвер?
Я пробовал Spring Boot 2 (2.0.0.M4 на данном этапе) с последней версией Spring Data Neo4j (в настоящее время 5.0.0.RC3) и не могу запустить ее.
Я получаю следующую ошибку:
org.neo4j.ogm.exception.ConfigurationException: Could not load driver class org.neo4j.ogm.drivers.embedded.driver.EmbeddedDriver
Я не прошу встроенный драйвер и не хочу его. Я только хочу использовать драйвер болта, который уже является зависимостью от spring-data-neo4j.
Я опубликовал проект для Github, созданный с использованием выходных данных Spring Initializr, которые можно запустить, чтобы выявить ошибку.
Для справки мой build.gradle выглядит следующим образом. Я неправильно настраиваю свой проект? Или что-то более серьезное не так с текущими сборками Spring и Neo4j?
buildscript {
ext {
springBootVersion = '2.0.0.M4'
}
repositories {
mavenCentral()
maven { url 'https://repo.spring.io/snapshot' }
maven { url 'https://repo.spring.io/milestone' }
}
dependencies {
classpath "org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}"
}
}
apply plugin: 'java'
apply plugin: 'idea'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
version = "0.0.1-SNAPSHOT"
sourceCompatibility = 1.8
targetCompatibility = 1.8
repositories {
mavenLocal()
mavenCentral()
maven { url "https://repo.spring.io/snapshot" }
maven { url "https://repo.spring.io/milestone" }
}
dependencies {
compile "org.apache.tomcat.embed:tomcat-embed-jasper"
compile "org.springframework.boot:spring-boot-starter-web"
compile "org.springframework.boot:spring-boot-starter-data-neo4j"
runtime "org.springframework.boot:spring-boot-devtools"
}
Остальная часть кода доступна в Github, как я упоминал ранее.
1 ответ
У вас нет зависимости от встроенного драйвера, смотрите
./gradlew dependencies
вывод и поиск neo4j-ogm.*driver
- присутствует только драйвер neo4j-ogm-bolt. Поэтому, если вы хотите использовать только болт, у вас правильно установлены зависимости.
Причина, по которой вы видите это исключение, заключается в том, что ваша конфигурация неверна:
return new SessionFactory("com.example.domain");
Это не обеспечивает путь к файлу конфигурации, тогда по умолчанию используется постоянная встроенная база данных, для которой требуется встроенный драйвер - отсюда и исключение.
У вас есть два варианта
передать конфигурацию OGM в SessionFactory:
@Bean public org.neo4j.ogm.config.Configuration configuration() { return new org.neo4j.ogm.config.Configuration.Builder(new ClasspathConfigurationSource("ogm.properties")).build(); } @Bean public SessionFactory sessionFactory() { return new SessionFactory(configuration(), "com.example.domain"); }
Имейте в виду, что это решение OGM only и не поддерживает yml-файлы.
использовать автоматическую настройку весенней загрузки для SDN - просто удалите
Neo4jConfiguration
класс, Spring Boot обнаружит нетSessionFactory
bean и настроит все необходимое (включая менеджер транзакций). Держите вашиApplication
класс иapplication.yml
как есть.