为什么带有 Spring Boot 2.0.0.M4 的 Neo4j OGM 显然需要嵌入式驱动程序?

Why does Neo4j OGM with Spring Boot 2.0.0.M4 apparently require the embedded driver?

我一直在使用最新的 Spring Data Neo4j(当前为 5.0.0.RC3)试用 Spring Boot 2(现阶段为 2.0.0.M4),但似乎无法明白了 运行.

我收到以下错误:

org.neo4j.ogm.exception.ConfigurationException: Could not load driver class org.neo4j.ogm.drivers.embedded.driver.EmbeddedDriver

我不要求嵌入式驱动程序,我也不想要。我只想使用螺栓驱动器,它已经是 spring-data-neo4j.

的依赖项

我发布了一个project to Github that was built using output from 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 中可用。

您在任何地方都没有嵌入式驱动程序依赖项,请参阅

./gradlew dependencies

输出并搜索 neo4j-ogm.*driver - 只有 neo4j-ogm-bolt 驱动程序存在。因此,如果您只想使用 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 解决方案,不支持 yml 文件。

  • 使用 spring SDN 的启动自动配置 - 只需删除 Neo4jConfiguration class,Spring 启动将检测到没有 SessionFactory bean 并将配置所有必需的(包括事务管理器)。保持你的 Application class 和 application.yml 不变。