2016-07-29 12 views
0

Wenn Sie einen Neo4J-Datenbankserver eigenständig (unter Ubuntu 14.04) ausführen, lautet die Konfiguration optionsset für die globale Installation in etc/neo4j/neo4j.conf oder möglicherweise $NEO4J_HOME/conf/neo4j.conf.Wie man Neo4J Konfigurationsschlüssel in Gremlin-Scala einstellt?

Wenn jedoch eine Neo4j Datenbank von Java oder Scala Instanziieren Apache mit Neo4jGraph Klasse (org.apache.tinkerpop.gremlin.neo4j.structure.Neo4jGraph), gibt es keine globale Installation, und der Konstruktor nicht (as far as I can tell) für alle Konfigurationsdateien suchen.

Insbesondere dann, wenn die Testsuite für meine Anwendung läuft, habe ich am Ende mit vielen gleichzeitigen Instanzen Neo4jGraph, die über eine java.net.BindException: Address already in use werfen endet, weil alle diese Instanzen versuchen, einen kleinen Bereich von Ports für die Kommunikation über Online-Backup , die ich eigentlich nicht brauche. Diese Kanäle werden mit den Konfigurationsoptionen dbms.backup.address (Standardwert: 127.0.0.1:6362-6372) und dbms.backup.enabled (Standardwert: true) festgelegt.

Mein Problem würde gelöst werden, indem man dbms.backup.enabled auf false setzt oder den Portbereich erweitert.

Dinge, die nicht gearbeitet haben:

  • Erstellen /etc/neo4j/neo4j.confdbms.backup.enabled=false die Zeile enthält.

  • Erstellen der gleichen Datei im Verzeichnis src/main/resources meines Projekts.

  • Erstellen der gleichen Datei in src/main/resources/neo4j.

  • Manuelles Einstellen der Konfigurationseigenschaft in den Code Scala:

val db = new Neo4jGraph(dataDirectory) db.configuration.addProperty("dbms.backup.enabled",false)

  • oder

db.configuration.addProperty("neo4j.conf.dbms.backup.enabled",false)

  • oder

db.configuration.addProperty("gremlin.neo4j.conf.dbms.backup.enabled",false)

Wie soll ich gehen über die Einstellung dieser Eigenschaft?

Antwort

0

Manipulieren db.configuration nachdem die Datenbankverbindung bereits geöffnet wurde, war definitiv sinnlos.

stephen mallette 's Antwort war auf der richtigen Spur, aber diese bestimmte Konfiguration scheint nicht in der Art und Weise zu passieren, wie sein verknüpftes Beispiel tut. Zwischen den in neo4j.conf erwarteten und den in org.neo4j.backup.OnlineBackupKernelExtension erwarteten Konfigurationsschlüsseln besteht ein Namenskonflikt. Anstelle von dbms.backup.address und dbms.backup.enabled sucht diese Klasse nach den Konfigurationsschlüsseln online_backup_server und online_backup_enabled.

Ich konnte diese Schlüssel nicht korrekt an die zugrunde liegende Neo4jGraphAPI Instanz übergeben. Was ich zu tun hatte, stattdessen war die folgende:

import org.neo4j.tinkerpop.api.impl.Neo4jFactoryImpl 
import scala.collection.JavaConverters._ 

val factory = new Neo4jFactoryImpl() 
val config = Map(
    "online_backup_enabled" -> "true", 
    "online_backup_server" -> "0.0.0.0:6350-6359" 
).asJava 
val db = Neo4jGraph.open(factory.newGraphDatabase(dataDirectory,config)) 

Mit dieser Initialisierung die Instanz für Backups auf Port 6350 richtig zugehört; Ändern "true" zu "false" deaktiviert Backup zu hören.

0

Neo4jGraph Die Konfiguration über TinkerPop erfolgt über eine Pass-Through-Funktion der Konfigurationsschlüssel. In TinkerPop 3.x würde das bedeuten, dass alle Neo4j-Schlüssel mit dem Präfix gremlin.neo4j.conf, die über Configuration Objekt an Neo4jGraph.open() oder GraphFactory.open() bereitgestellt werden, direkt an die Neo4j-Instanz weitergegeben werden. Beispiele für diese here finden Sie in der TinkerPop-Dokumentation zur Hochverfügbarkeitskonfiguration.

In TinkerPop 2.x wurde der gleiche Ansatz verwendet, jedoch wurde das Schlüsselpräfix stattdessen blueprints.neo4j.conf.* wie diskutiert here.

+0

Hat Einstellung Konfigurations-Schlüssel 'gremlin.neo4j.conf.dbms.backup.address', sagen wir,' 0.0. 0.0: 6350-6359 "eine Instanz erzeugen, die auf diesen Portbereich hört? Für mich ist es nicht. – MSmedberg

0

Neo4j Mit 3.0.0 folgende Port deaktiviert für mich hören (Java-Code)

import org.apache.commons.configuration.BaseConfiguration; 
import org.apache.tinkerpop.gremlin.neo4j.structure.Neo4jGraph; 

BaseConfiguration conf = new BaseConfiguration(); 
conf.setProperty(Neo4jGraph.CONFIG_DIRECTORY, "/path/to/db"); 
conf.setProperty(Neo4jGraph.CONFIG_CONF + "." + "dbms.backup.enabled", "false"); 
graph = Neo4jGraph.open(config);