[英]How to Dynamically reload Spring Data Neo4j graph database service with different databases
我已经将项目配置为使用一个图形数据库,并且该数据库处于嵌入式模式。 这是我的配置类。
@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
以包括新的数据库路径。 我怎样才能做到这一点 ?
在HA环境中配置Spring Data Neo4j 4.1
典型的Neo4j
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将自动将事务路由到该服务器。
通过HAProxy进行Spring Data Neo4j 4绑定
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的完整教程,请点击此处。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.