Конфигурация подключаемого сервера Neo4j

#neo4j

#neo4j

Вопрос:

Я создаю серверный плагин Neo4J. Я хотел бы иметь некоторые значения конфигурации, которые я мог бы вручную установить в neo4j.properties или neo4j-server.properties, а затем плагин может считывать и использовать эти значения. Как я могу получить доступ к значениям конфигурации из подключаемого сервера?

Уточнение: мне бы очень хотелось чего-то, что будет работать в будущих выпусках Neo4J, поэтому лучше всего было бы что-то, что является частью общедоступного API и не является устаревшим.

Ответ №1:

Используя механизм внутренней зависимости Neo4j, вы можете получить доступ к экземпляру Config ( https://github.com/neo4j/neo4j/blob/master/community/kernel/src/main/java/org/neo4j/kernel/configuration/Config.java). Этот класс предоставляет вам доступ к конфигурации.

Возьмите следующий непроверенный фрагмент в качестве руководства:

 ...
import org.neo4j.kernel.configuration.Config
...

@Description( "An extension to the Neo4j Server accessing config" )
public class ConfigAwarePlugin extends ServerPlugin
{
    @Name( "config" )
    @Description( "Do stuff with config" )
    @PluginTarget( GraphDatabaseService.class )
    public void sample( @Source GraphDatabaseService graphDb ) {
        Config config = ((GraphDatabaseAPI)graphDb).getDependencyResolver().resolveDependency(Config.class);

        // do stuff with config
    }
}
  

Комментарии:

1. Спасибо. Это действительно работает, но я хотел бы что-то, что могло бы поддерживаться в будущем. 1) Интерфейс GraphDatabaseAPI устарел с сообщением «Это будет перенесено во внутренние пакеты в следующем крупном выпуске». 2) Метод getDependencyResolver содержит сообщение «Использование этого метода обычно указывает на архитектурную ошибку». 3) Метод Config.getParams имеет задачу в коде «Избавиться от этого, чтобы позволить нам иметь что-то более сложное в качестве внутреннего хранилища (например, что-то, что может хранить метаданные со свойствами)». Я обеспокоен долговечностью этого подхода.

Ответ №2:

Я использую Properties :

     Properties props = new Properties();
    try
    {
        FileInputStream in = new FileInputStream("./conf/neo4j.properties");
        props.load(in);
    }
    catch (FileNotFoundException e)
    {
        try
        {
            FileInputStream in = new FileInputStream("./neo4j.properties");
            props.load(in);
        }
        catch (FileNotFoundException e2)
        {
            logger.warn(e2.getMessage());
        }
        catch (IOException e2)
        {
            logger.warn(e2.getMessage());
        }
    }
    catch (IOException e)
    {
        logger.warn(e.getMessage());
    }
    String myPropertyString = props.getProperty("myProperty");
    if (myPropertyString != null)
    {
        myProperty = Integer.parseInt(myPropertyString);
    }
    else
    {
        myProperty = 100;
    }
  

и в neo4j.properties у меня есть:

 ...    
# Enable shell server so that remote clients can connect via Neo4j shell.
#remote_shell_enabled=true
# Specify custom shell port (default is 1337).
#remote_shell_port=1234

myProperty=100
  

Комментарии:

1. Спасибо. У меня была бы та же проблема, которую вы частично затронули в своем коде, с которого запускается сервер и пытается загрузить neo4j.properties по относительному пути.