如何配置 spring-data-neo4j 嵌入式服务器属性?
How to configure spring-data-neo4j embedded server properties?
我已使用 spring-data-neo4j v 4.2.1、neo4j-ogm v 2.1.2 进行设置。
我需要具有特定配置的嵌入式 neo4j 服务器进行测试。 cypher.forbid_shortestpath_common_nodes=false
.
我在 spring @Configuration bean:
中尝试过但没有成功
@Bean
public org.neo4j.ogm.config.Configuration getConfiguration() {
org.neo4j.ogm.config.Configuration config = new org.neo4j.ogm.config.Configuration();
config.driverConfiguration().setDriverClassName("org.neo4j.ogm.drivers.embedded.driver.EmbeddedDriver");
config.set("cypher.forbid_shortestpath_common_nodes", false);
return config;
}
请问,如何在 spring java 配置中进行设置?
cypher.forbid_shortestpath_common_nodes
是 Neo4j 设置,而不是 SDN/OGM,因此您需要在创建数据库时将其提供给数据库。
理想情况下,嵌入式数据库的配置类似于以下内容:
@Configuration
@EnableNeo4jRepositories(basePackageClasses = UserRepository.class)
@ComponentScan(basePackageClasses = UserService.class)
static class EmbeddedConfig {
@Bean(destroyMethod = "shutdown")
public GraphDatabaseService graphDatabaseService() {
GraphDatabaseService graphDatabaseService = new GraphDatabaseFactory()
.newEmbeddedDatabaseBuilder(new File("target/graph.db"))
.setConfig(GraphDatabaseSettings.forbid_shortestpath_common_nodes, "false")
.newGraphDatabase();
return graphDatabaseService;
}
@Bean
public SessionFactory getSessionFactory() {
org.neo4j.ogm.config.Configuration configuration = new org.neo4j.ogm.config.Configuration();
EmbeddedDriver driver = new EmbeddedDriver(graphDatabaseService());
Components.setDriver(driver);
return new SessionFactory(configuration, User.class.getPackage().getName());
}
@Bean
public Neo4jTransactionManager transactionManager() throws Exception {
return new Neo4jTransactionManager(getSessionFactory());
}
}
但是这对 SDN 4 不起作用。2.x,但有一个解决方法:
@Bean
public SessionFactory getSessionFactory() {
org.neo4j.ogm.config.Configuration configuration = new org.neo4j.ogm.config.Configuration();
// Register your configuration here, this will confuse OGM so the driver you set below won't be destroyed
Components.configure(configuration);
// Register your driver
EmbeddedDriver driver = new EmbeddedDriver(graphDatabaseService());
Components.setDriver(driver);
// Set driver class name so you won't get NPE
configuration.driverConfiguration().setDriverClassName("org.neo4j.ogm.drivers.embedded.driver.EmbeddedDriver");
return new SessionFactory(configuration, User.class.getPackage().getName());
}
从 neo4j-ogm-embedded-driver
版本 3.2.1
开始,可以应用以下方法。
@Configuration
public class EmbeddedNeo4jConfig {
@Bean
org.neo4j.ogm.config.Configuration getConfiguration() {
var builder = new org.neo4j.ogm.config.Configuration.Builder()
.neo4jConfLocation("neo4j.conf");
return builder.build();
}
}
test/resources/neo4j.conf
:
cypher.forbid_shortestpath_common_nodes=false
我已使用 spring-data-neo4j v 4.2.1、neo4j-ogm v 2.1.2 进行设置。
我需要具有特定配置的嵌入式 neo4j 服务器进行测试。 cypher.forbid_shortestpath_common_nodes=false
.
我在 spring @Configuration bean:
中尝试过但没有成功@Bean
public org.neo4j.ogm.config.Configuration getConfiguration() {
org.neo4j.ogm.config.Configuration config = new org.neo4j.ogm.config.Configuration();
config.driverConfiguration().setDriverClassName("org.neo4j.ogm.drivers.embedded.driver.EmbeddedDriver");
config.set("cypher.forbid_shortestpath_common_nodes", false);
return config;
}
请问,如何在 spring java 配置中进行设置?
cypher.forbid_shortestpath_common_nodes
是 Neo4j 设置,而不是 SDN/OGM,因此您需要在创建数据库时将其提供给数据库。
理想情况下,嵌入式数据库的配置类似于以下内容:
@Configuration
@EnableNeo4jRepositories(basePackageClasses = UserRepository.class)
@ComponentScan(basePackageClasses = UserService.class)
static class EmbeddedConfig {
@Bean(destroyMethod = "shutdown")
public GraphDatabaseService graphDatabaseService() {
GraphDatabaseService graphDatabaseService = new GraphDatabaseFactory()
.newEmbeddedDatabaseBuilder(new File("target/graph.db"))
.setConfig(GraphDatabaseSettings.forbid_shortestpath_common_nodes, "false")
.newGraphDatabase();
return graphDatabaseService;
}
@Bean
public SessionFactory getSessionFactory() {
org.neo4j.ogm.config.Configuration configuration = new org.neo4j.ogm.config.Configuration();
EmbeddedDriver driver = new EmbeddedDriver(graphDatabaseService());
Components.setDriver(driver);
return new SessionFactory(configuration, User.class.getPackage().getName());
}
@Bean
public Neo4jTransactionManager transactionManager() throws Exception {
return new Neo4jTransactionManager(getSessionFactory());
}
}
但是这对 SDN 4 不起作用。2.x,但有一个解决方法:
@Bean
public SessionFactory getSessionFactory() {
org.neo4j.ogm.config.Configuration configuration = new org.neo4j.ogm.config.Configuration();
// Register your configuration here, this will confuse OGM so the driver you set below won't be destroyed
Components.configure(configuration);
// Register your driver
EmbeddedDriver driver = new EmbeddedDriver(graphDatabaseService());
Components.setDriver(driver);
// Set driver class name so you won't get NPE
configuration.driverConfiguration().setDriverClassName("org.neo4j.ogm.drivers.embedded.driver.EmbeddedDriver");
return new SessionFactory(configuration, User.class.getPackage().getName());
}
从 neo4j-ogm-embedded-driver
版本 3.2.1
开始,可以应用以下方法。
@Configuration
public class EmbeddedNeo4jConfig {
@Bean
org.neo4j.ogm.config.Configuration getConfiguration() {
var builder = new org.neo4j.ogm.config.Configuration.Builder()
.neo4jConfLocation("neo4j.conf");
return builder.build();
}
}
test/resources/neo4j.conf
:
cypher.forbid_shortestpath_common_nodes=false