[英]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.