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

时间:2017-09-22 02:39:02

标签: spring-boot neo4j spring-data-neo4j-4 neo4j-ogm

我一直在使用最新的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

我不要求嵌入式驱动程序,也不需要嵌入式驱动程序。我只想使用bolt驱动程序,它已经是spring-data-neo4j的依赖项。

我发布了project to 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 个答案:

答案 0 :(得分:2)

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

./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文件。

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