Почему для 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 как есть.

Другие вопросы по тегам