我已将项目配置为使用一个图形数据库,这是嵌入模式。这是我的配置类。
@Configuration
@EnableNeo4jRepositories(basePackages = "com.comp")
@EnableTransactionManagement
static class ApplicationConfig {
@Value("${application.neo4j.db.path}")
private String dbPath;
public ApplicationConfig() {
}
@Configuration
static class Neo4jMoreConfig extends Neo4jConfiguration {
Neo4jMoreConfig() {
setBasePackage("com.comp");
}
}
@Bean
public GraphDatabaseService graphDatabaseService() {
return new GraphDatabaseFactory().newEmbeddedDatabase(new File(dbPath));
}
}
当应用程序根据我在application.yml中配置的名称部署其创建数据库时。但是我需要为不同的场景创建多个数据库。为此,我需要重新加载/刷新我的graphDatabaseService
以包含新的数据库路径。我怎么能这样做?
答案 0 :(得分:-1)
在HA环境中配置Spring Data Neo4j 4.1
典型的Neo4j
HA群集将由主节点和几个从节点组成,用于提供故障转移功能并可选择用于处理读取。 (尽管可以写入从站,但这种情况并不常见,因为它需要额外的工作来使从站与主节点同步)
在HA模式下操作时,Neo4j does not make open transactions available across all nodes in the cluster
。这意味着我们必须将特定事务中的每个请求绑定到集群中的同一节点,否则提交将因404 Not Found而失败。
从版本4开始,Spring Data Neo4j不区分WRITE事务和READ-ONLY事务。因此,我们不能将只读事务绑定到从属服务器并将事务写入主服务器。未来版本将解决这一缺陷,但与此同时,确保一切按预期工作的唯一方法是指导每个交易掌握。有几种方法可以实现这一目标。
示例群集:
Components.driver().setURI("http://192.168.0.55:7474");
除了测试目的,我们并不真正推荐这种方法 和非关键部署。首先,它只会在你总是有效的情况下起作用 首先提出指定的主人,其次,如果主人去 在重新启动之前,所有后续事务都将失败。在 在HA模式下,群集能够在发生这种情况时选择新的主服务器, 但是从Spring Data Neo4j的第4版开始,就没有机制了 查询集群以识别当前主服务器。解决方案 这种情况是使用负载平衡器,如HAProxy,可以做到这一点 为了我们。这将在下一节中介绍。
在Neo4j HA架构中,群集通常由负载均衡器提供。以下示例显示如何配置应用程序并将HAProxy设置为负载平衡器,以将所有请求路由到群集中当前标识为主服务器的任何计算机。由于只有一台机器可以成为当选的主机,这应该完全按照我们的意愿工作。此外,如果选定的主服务器失败,则将从群集中选择一个新服务器作为主服务器,HAProxy将自动将事务路由到此服务器。
Spring Data Neo4j 4通过HAProxy进行绑定
Components.driver().setURI("http://10.0.2.200");
haproxy.cfg
global
daemon
maxconn 256
defaults
mode http
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
frontend http-in
bind *:80
default_backend neo4j
backend neo4j
option httpchk GET /db/manage/server/ha/master
server s1 10.0.1.10:7474 maxconn 32
server s2 10.0.1.11:7474 maxconn 32
server s3 10.0.1.12:7474 maxconn 32
listen admin
bind *:8080
stats enable
对于使用java的完整教程,链接为here.