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

时间:2016-03-31 06:20:27

标签: java spring neo4j spring-boot spring-data-neo4j

我已将项目配置为使用一个图形数据库,这是嵌入模式。这是我的配置类。

@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以包含新的数据库路径。我怎么能这样做?

1 个答案:

答案 0 :(得分:-1)

在HA环境中配置Spring Data Neo4j 4.1

HA模式下的事务绑定

典型的Neo4j HA群集将由主节点和几个从节点组成,用于提供故障转移功能并可选择用于处理读取。 (尽管可以写入从站,但这种情况并不常见,因为它需要额外的工作来使从站与主节点同步) enter image description here

典型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. master:192.168.0.55
  2. slave1:192.168.0.56
  3. slave2:192.168.0.67
  4. SDN4绑定到主IP地址

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

    除了测试目的,我们并不真正推荐这种方法   和非关键部署。首先,它只会在你总是有效的情况下起作用   首先提出指定的主人,其次,如果主人去   在重新启动之前,所有后续事务都将失败。在   在HA模式下,群集能够在发生这种情况时选择新的主服务器,   但是从Spring Data Neo4j的第4版开始,就没有机制了   查询集群以识别当前主服务器。解决方案   这种情况是使用负载平衡器,如HAProxy,可以做到这一点   为了我们。这将在下一节中介绍。

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

    在Neo4j HA架构中,群集通常由负载均衡器提供。以下示例显示如何配置应用程序并将HAProxy设置为负载平衡器,以将所有请求路由到群集中当前标识为主服务器的任何计算机。由于只有一台机器可以成为当选的主机,这应该完全按照我们的意愿工作。此外,如果选定的主服务器失败,则将从群集中选择一个新服务器作为主服务器,HAProxy将自动将事务路由到此服务器。

    HAProxy前面的示例集群

    1. haproxy: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
    5. 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
      

      资源链接:

      1. Good Relationships: The Spring Data Neo4j Guide Book
      2. 对于使用java的完整教程,链接为here.