繁体   English   中英

如何使用不同的数据库动态地重新加载Spring Data Neo4j图形数据库服务

[英]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群集将由一个主节点和几个从节点组成,以提供故障转移功能并可选地用于处理读取。 (尽管可以写从属设备,但这并不常见,因为需要付出额外的努力才能使从属设备与主节点同步) 在此处输入图片说明

典型的HA群集

在高可用性模式下运行时, Neo4j does not make open transactions available across all nodes in the cluster 这意味着我们必须将特定事务中的每个请求绑定到群集中的同一节点,否则提交将失败并显示404 Not Found。

只读交易

从版本4开始,Spring Data Neo4j不会区分WRITE事务和READ-ONLY事务。 因此,我们不能将只读事务绑定到从属设备,而不能将事务写入到主服务器。 将来的版本将解决此缺陷,但是与此同时,确保一切正常工作的唯一方法是将每笔交易引导到主交易。 有两种方法可以实现此目的。

静态绑定到指定的母版

集群示例:

  1. 主人:192.168.0.55
  2. slave1:192.168.0.56
  3. slave2:192.168.0.67

SDN4绑定到主IP地址

Components.driver().setURI("http://192.168.0.55:7474");

除了测试目的和非关键部署之外,我们实际上不建议使用此方法。 首先,只有在始终先启动指定的主服务器后,它才能工作;其次,如果主服务器关闭,所有后续事务将失败,直到重新启动为止。 在HA模式下,发生这种情况时,集群可以选择一个新的主服务器,但是从Spring Data Neo4j版本4开始,没有用于查询集群以标识当前主服务器的机制。 在这种情况下,解决方案是使用可以为我们完成此任务的负载平衡器(例如HAProxy)。 下一节将对此进行描述。

通过负载均衡器进行动态绑定

在Neo4j HA体系结构中,群集通常位于负载平衡器的前面。 以下示例显示了如何配置应用程序并将HAProxy设置为负载平衡器,以将所有请求路由到群集中当前标识为主服务器的任何计算机。 由于只有一台计算机可以成为当选的主机,因此这应该可以完全按照我们的意愿工作。 此外,如果当选的主服务器发生故障,将从集群中选出一个新服务器作为主服务器,并且HAProxy将自动将事务路由到该服务器。

HAProxy面向的示例集群

  1. happroxy:10.0.2.200
  2. neo4j-server1:10.0.1.10
  3. neo4j-server2:10.0.1.11
  4. neo4j-server3:10.0.1.12

通过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

资源链接:

  1. 良好的关系:Spring Data Neo4j指导书

有关使用Java的完整教程,请点击此处。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM