在spring-boot应用程序中使用嵌入式neo4j的相对路径

时间:2016-12-23 03:24:50

标签: java spring-boot neo4j uri spring-data-neo4j

我正在尝试使用嵌入式数据库设置示例spring-boot-neo4j应用程序。我按照建议的herehere添加了所需的依赖项和配置。虽然这适用于绝对路径

spring.data.neo4j.uri=file://var/tmp/graph.db

我似乎找不到指定相对路径的方法。我尝试了file://graph.dbfile://./graph.db以及file://~/graph.db但是得到了这个

Caused by: java.lang.IllegalArgumentException: URI has an authority component
    at java.io.File.<init>(File.java:423) ~[na:1.8.0_112]
    at org.neo4j.ogm.drivers.embedded.driver.EmbeddedDriver.createPermanentFileStore(EmbeddedDriver.java:211) ~[neo4j-ogm-embedded-driver-2.0.5.jar:na]
    at org.neo4j.ogm.drivers.embedded.driver.EmbeddedDriver.configure(EmbeddedDriver.java:102) ~[neo4j-ogm-embedded-driver-2.0.5.jar:na]

尝试删除file://并使用graph.db./graph.db,但获取URI is not absolute

尝试file:./graph.db,但获得URI is not hierarchical

我想使用相对于项目位置(或主文件夹)的路径,有人可以指出如何指定这样的路径。我使用的是neo4j-ogm 2.0.5,gradle 2.14,spring-boot 1.4.2和jdk 1.8。

由于

3 个答案:

答案 0 :(得分:0)

您可以使用$ {user.dir}来解析绝对路径。

uri=file:${user.dir}/target/mock_data/neo4j_${random.uuid}/graph.db
uri=file:${user.dir}/../neo4j_${random.uuid}/graph.db

答案 1 :(得分:0)

目前正如Thomas正确提到的那样,您不能将相对路径与嵌入式数据存储区和OGM一起使用。

你可以:

  • 使用环境变量(如Thomas所述)。有关如何传递此内容的各种选项,请参阅the documentation
  • 指定类型@Bean的{​​{1}}并通过调用类似org.neo4j.ogm.config.Configuration的内容来设置URI以获取当前目录,然后附加所需的相对目录。

答案 2 :(得分:0)

看似强大的跨平台解决方案:

  @Value("${spring.data.neo4j.uri:default}")
  private String neoUri;

  @Bean
  public Configuration neoConfig() throws URISyntaxException, IOException {
    String path = neoUri;
    Configuration.Builder builder = new Configuration.Builder();
    if (!"default".equals(path)) {
      LOG.info("Configured database uri: " + path);
      path = path.replace('\\', '/');
      URI uri = new URI(path);
      if ("file".equals(uri.getScheme())) {
        File file = new File(uri.getSchemeSpecificPart());
        path = "file:///" + file.getCanonicalFile().getAbsolutePath().replace('\\', '/');
        LOG.info("Absolute database path: " + path);
      }
      builder.uri(path);
    }
    // TODO: process other neo4j properties
    return builder.build();
  }

限制:不能将反斜杠用作目录名称的一部分;)