Java 在spring boot应用程序中使用嵌入式neo4j的相对路径
我正在尝试使用嵌入式数据库设置示例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.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
但getURI不是绝对的
已尝试文件:./graph.db
但getURI不是分层的
我想使用相对于项目位置(或主文件夹)的路径,有人可以指出如何指定这样的路径。我使用的是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代码会更容易。