我正在尝试使用嵌入式数据库设置示例spring-boot-neo4j应用程序。我按照建议的here和here添加了所需的依赖项和配置。虽然这适用于绝对路径
spring.data.neo4j.uri=file://var/tmp/graph.db
我似乎找不到指定相对路径的方法。我尝试了file://graph.db
和file://./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。
由于
答案 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一起使用。
你可以:
@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();
}
限制:不能将反斜杠用作目录名称的一部分;)