Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在spring boot应用程序中使用嵌入式neo4j的相对路径_Java_Spring Boot_Neo4j_Uri_Spring Data Neo4j - Fatal编程技术网

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

Java 在spring boot应用程序中使用嵌入式neo4j的相对路径,java,spring-boot,neo4j,uri,spring-data-neo4j,Java,Spring Boot,Neo4j,Uri,Spring Data Neo4j,我正在尝试使用嵌入式数据库设置示例spring-boot-neo4j应用程序。我按照建议和建议添加了所需的依赖项和配置。而这适用于绝对路径 spring.data.neo4j.uri=file://var/tmp/graph.db 我似乎找不到指定相对路径的方法。我试过file://graph.db和file://./graph.db和文件://~/graph.db但是得到这个 Caused by: java.lang.IllegalArgumentException: URI has an

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

spring.data.neo4j.uri=file://var/tmp/graph.db
我似乎找不到指定相对路径的方法。我试过
file://graph.db
file://./graph.db
文件://~/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]
原因:java.lang.IllegalArgumentException:URI具有权限组件
在java.io.File.(File.java:423)~[na:1.8.0\u 112]
在org.neo4j.ogm.drivers.embedded.driver.EmbeddedDriver.createPermanentFileStore(EmbeddedDriver.java:211)~[neo4j-ogm-embedded-driver-2.0.5.jar:na]
在org.neo4j.ogm.drivers.embedded.driver.EmbeddedDriver.configure(EmbeddedDriver.java:102)~[neo4j-ogm-embedded-driver-2.0.5.jar:na]
尝试删除
文件://
并使用
graph.db
/graph.db
但get
URI不是绝对的

已尝试
文件:./graph.db
但get
URI不是分层的

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


谢谢

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

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

目前,正如Thomas正确地提到的,您不能使用嵌入数据存储和OGM的相对路径

你可以:

  • 使用环境变量(正如Thomas提到的)。有关如何传入的各种选项,请参见
  • 指定类型为
    org.neo4j.ogm.config.Configuration
    @Bean
    ,并通过调用类似于
    path.get(“.”.toabsolutionPath().normalize().toString()的内容来设置URI
    获取当前目录,然后附加所需的相对目录

跨平台解决方案:

  @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();
  }

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

不幸的是,这不起作用(至少在windows中不起作用)--
java.net.URISyntaxException:索引7的不透明部分中的非法字符:文件:D:\src\neo4j loader\graph.db
。我尝试了
文件://
文件://
,不同的错误消息,但没有成功。
字符似乎是问题所在。将在linux中尝试此功能仅适用于linux!发布一个跨平台的解决方案。将
${user.dir}
替换为
{T(java.lang.System).getProperty('user.dir')。替换('\\','/')}
我认为您需要使用开发自己的Windows解决方案。因为Windows有自己的方式来处理路径和“奇特的字符”,比如反斜杠、空格等等。还要注意digx1提到的@Bean解决方案。您可以使用SpEL做一些惊人的事情,但是编写普通Java代码会更容易。