CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/maven-org-neo4j--neo4j

Neo4j Community Edition - The world's leading Graph Database with Cypher query language and ACID transactions.

Pending
Overview
Eval results
Files

configuration.mddocs/

Configuration

Type-safe configuration system with validation, default values, and property file loading for customizing database behavior, performance, and security settings with comprehensive setting management.

Capabilities

Setting Interface

Interface representing a configuration setting with type safety, validation, and metadata.

/**
 * Represents a configuration setting
 */
public interface Setting<T> {
    
    /**
     * Get the name of this setting
     * @return Setting name
     */
    String name();
    
    /**
     * Get the default value for this setting
     * @return Default value
     */
    T defaultValue();
    
    /**
     * Get the description of this setting
     * @return Setting description
     */
    String description();
    
    /**
     * Parse a string value into the setting's type
     * @param value String value to parse
     * @return Parsed value
     * @throws IllegalArgumentException if value cannot be parsed
     */
    T parse(String value);
    
    /**
     * Validate a value for this setting
     * @param value Value to validate
     * @throws IllegalArgumentException if value is invalid
     */
    void validate(T value);
    
    /**
     * Get the setting's value type
     * @return Class representing the value type
     */
    Class<T> getType();
    
    /**
     * Check if this setting is deprecated
     * @return true if deprecated
     */
    boolean deprecated();
    
    /**
     * Get replacement setting if this one is deprecated
     * @return Replacement setting, or null if none
     */
    Setting<T> replacement();
}

Graph Database Settings

Central configuration settings class containing all standard Neo4j configuration options.

/**
 * Central configuration settings for Neo4j
 */
public final class GraphDatabaseSettings {
    
    // Database directories and files
    public static final Setting<Path> data_directory = 
        setting("server.directories.data", PATH, Paths.get("data"));
    
    public static final Setting<Path> logs_directory = 
        setting("server.directories.logs", PATH, Paths.get("logs"));
    
    public static final Setting<Path> plugins_directory = 
        setting("server.directories.plugins", PATH, Paths.get("plugins"));
    
    // Memory settings
    public static final Setting<Long> heap_initial_size = 
        setting("server.memory.heap.initial_size", BYTES, null);
    
    public static final Setting<Long> heap_max_size = 
        setting("server.memory.heap.max_size", BYTES, null);
    
    public static final Setting<Long> pagecache_memory = 
        setting("server.memory.pagecache.size", BYTES, null);
    
    // Transaction settings
    public static final Setting<Duration> transaction_timeout = 
        setting("db.transaction.timeout", DURATION, Duration.ofSeconds(0));
    
    public static final Setting<Integer> transaction_concurrent_maximum = 
        setting("db.transaction.concurrent.maximum", INT, 1000);
    
    public static final Setting<Duration> transaction_bookmark_ready_timeout = 
        setting("db.transaction.bookmark_ready_timeout", DURATION, Duration.ofSeconds(30));
    
    // Query settings
    public static final Setting<Duration> cypher_query_cache_size = 
        setting("db.cypher.query_cache_size", DURATION, Duration.ofSeconds(0));
    
    public static final Setting<Boolean> cypher_hints_error = 
        setting("db.cypher.hints_error", BOOLEAN, false);
    
    public static final Setting<Long> cypher_min_replan_interval = 
        setting("db.cypher.min_replan_interval", LONG, 10000L);
    
    // Security settings
    public static final Setting<Boolean> auth_enabled = 
        setting("dbms.security.auth_enabled", BOOLEAN, true);
    
    public static final Setting<Duration> auth_lock_time = 
        setting("dbms.security.auth_lock_time", DURATION, Duration.ofSeconds(5));
    
    public static final Setting<Integer> auth_max_failed_attempts = 
        setting("dbms.security.auth_max_failed_attempts", INT, 3);
    
    // Network settings
    public static final Setting<SocketAddress> default_listen_address = 
        setting("server.default_listen_address", SOCKET_ADDRESS, 
               new SocketAddress("localhost", 7687));
    
    public static final Setting<AdvertisedSocketAddress> default_advertised_address = 
        setting("server.default_advertised_address", ADVERTISED_SOCKET_ADDRESS, null);
    
    // Logging settings
    public static final Setting<Level> log_level = 
        setting("server.logs.debug.level", LOG_LEVEL, Level.INFO);
    
    public static final Setting<Boolean> log_queries = 
        setting("db.logs.query.enabled", BOOLEAN, false);
    
    public static final Setting<Duration> log_queries_threshold = 
        setting("db.logs.query.threshold", DURATION, Duration.ofSeconds(0));
    
    // Backup and import settings
    public static final Setting<Boolean> allow_file_urls = 
        setting("db.security.allow_csv_import_from_file_urls", BOOLEAN, true);
    
    public static final Setting<Path> import_directory = 
        setting("server.directories.import", PATH, Paths.get("import"));
    
    // Performance settings
    public static final Setting<Boolean> read_only = 
        setting("db.read_only", BOOLEAN, false);
    
    public static final Setting<Integer> relationship_grouping_threshold = 
        setting("db.relationship_grouping_threshold", INT, 50);
    
    public static final Setting<Boolean> dense_node_threshold = 
        setting("db.dense_node_threshold", BOOLEAN, true);
}

Usage Examples:

import org.neo4j.configuration.GraphDatabaseSettings;
import org.neo4j.dbms.api.DatabaseManagementServiceBuilder;
import java.time.Duration;
import java.nio.file.Paths;

// Basic configuration
DatabaseManagementService service = new DatabaseManagementServiceBuilder(dbPath)
    .setConfig(GraphDatabaseSettings.transaction_timeout, Duration.ofMinutes(5))
    .setConfig(GraphDatabaseSettings.heap_max_size, 2L * 1024 * 1024 * 1024) // 2GB
    .setConfig(GraphDatabaseSettings.logs_directory, Paths.get("/custom/logs"))
    .build();

// Performance tuning configuration
DatabaseManagementService service = new DatabaseManagementServiceBuilder(dbPath)
    .setConfig(GraphDatabaseSettings.pagecache_memory, 4L * 1024 * 1024 * 1024) // 4GB
    .setConfig(GraphDatabaseSettings.transaction_concurrent_maximum, 2000)
    .setConfig(GraphDatabaseSettings.relationship_grouping_threshold, 100)
    .setConfig(GraphDatabaseSettings.cypher_min_replan_interval, 5000L)
    .build();

// Security configuration
DatabaseManagementService service = new DatabaseManagementServiceBuilder(dbPath)
    .setConfig(GraphDatabaseSettings.auth_enabled, true)
    .setConfig(GraphDatabaseSettings.auth_max_failed_attempts, 5)
    .setConfig(GraphDatabaseSettings.auth_lock_time, Duration.ofMinutes(10))
    .build();

Config Interface

Configuration container providing access to settings and configuration management.

/**
 * Configuration container
 */
public interface Config {
    
    /**
     * Get the value of a configuration setting
     * @param setting Setting to get value for
     * @return Current value of the setting
     */
    <T> T get(Setting<T> setting);
    
    /**
     * Set the value of a configuration setting
     * @param setting Setting to set value for
     * @param value New value for the setting
     */
    <T> void set(Setting<T> setting, T value);
    
    /**
     * Check if a setting has been explicitly configured
     * @param setting Setting to check
     * @return true if setting has been explicitly set
     */
    boolean isExplicitlySet(Setting<?> setting);
    
    /**
     * Get all configured settings
     * @return Map of settings to their values
     */
    Map<Setting<?>, Object> getValues();
    
    /**
     * Get configuration as properties
     * @return Properties object with configuration
     */
    Properties asProperties();
    
    /**
     * Validate the current configuration
     * @throws IllegalArgumentException if configuration is invalid
     */
    void validate();
    
    /**
     * Get configuration augmented with additional settings
     * @param additionalConfig Additional configuration
     * @return New config with merged settings
     */
    Config with(Map<Setting<?>, Object> additionalConfig);
}

Setting Builder Methods

Factory methods for creating different types of settings.

/**
 * Factory methods for creating settings
 */
public final class Settings {
    
    /**
     * Create a string setting
     * @param name Setting name
     * @param defaultValue Default value
     * @param description Setting description
     * @return String setting
     */
    public static Setting<String> setting(String name, String defaultValue, String description);
    
    /**
     * Create an integer setting
     * @param name Setting name
     * @param defaultValue Default value
     * @param description Setting description
     * @return Integer setting
     */
    public static Setting<Integer> setting(String name, Integer defaultValue, String description);
    
    /**
     * Create a boolean setting
     * @param name Setting name
     * @param defaultValue Default value
     * @param description Setting description
     * @return Boolean setting
     */
    public static Setting<Boolean> setting(String name, Boolean defaultValue, String description);
    
    /**
     * Create a duration setting
     * @param name Setting name
     * @param defaultValue Default value
     * @param description Setting description
     * @return Duration setting
     */
    public static Setting<Duration> setting(String name, Duration defaultValue, String description);
    
    /**
     * Create a path setting
     * @param name Setting name
     * @param defaultValue Default value
     * @param description Setting description
     * @return Path setting
     */
    public static Setting<Path> setting(String name, Path defaultValue, String description);
    
    /**
     * Create an enum setting
     * @param name Setting name
     * @param enumClass Enum class
     * @param defaultValue Default value
     * @param description Setting description
     * @return Enum setting
     */
    public static <T extends Enum<T>> Setting<T> setting(String name, Class<T> enumClass, 
                                                        T defaultValue, String description);
    
    /**
     * Create a list setting
     * @param name Setting name
     * @param itemType Type of list items
     * @param defaultValue Default value
     * @param description Setting description
     * @return List setting
     */
    public static <T> Setting<List<T>> listSetting(String name, Class<T> itemType, 
                                                  List<T> defaultValue, String description);
}

Advanced Configuration Examples:

import org.neo4j.configuration.Config;
import org.neo4j.configuration.GraphDatabaseSettings;
import java.util.Map;
import java.util.Properties;

// Load configuration from file
DatabaseManagementService service = new DatabaseManagementServiceBuilder(dbPath)
    .loadPropertiesFromFile(Paths.get("/etc/neo4j/neo4j.conf"))
    .build();

// Programmatic configuration with validation
Map<Setting<?>, Object> configMap = Map.of(
    GraphDatabaseSettings.transaction_timeout, Duration.ofMinutes(10),
    GraphDatabaseSettings.heap_max_size, 8L * 1024 * 1024 * 1024, // 8GB
    GraphDatabaseSettings.auth_enabled, false,
    GraphDatabaseSettings.log_queries, true,
    GraphDatabaseSettings.log_queries_threshold, Duration.ofSeconds(1)
);

DatabaseManagementService service = new DatabaseManagementServiceBuilder(dbPath)
    .setConfig(configMap)
    .build();

// Runtime configuration access
GraphDatabaseService db = service.database("neo4j");
Config config = db.getConfig();

// Check current values
Duration timeout = config.get(GraphDatabaseSettings.transaction_timeout);
Boolean authEnabled = config.get(GraphDatabaseSettings.auth_enabled);
Path dataDir = config.get(GraphDatabaseSettings.data_directory);

System.out.println("Transaction timeout: " + timeout);
System.out.println("Auth enabled: " + authEnabled);
System.out.println("Data directory: " + dataDir);

// Check if settings were explicitly configured
if (config.isExplicitlySet(GraphDatabaseSettings.heap_max_size)) {
    System.out.println("Heap size was explicitly configured");
}

// Get all configuration as properties
Properties props = config.asProperties();
props.forEach((key, value) -> System.out.println(key + " = " + value));

// Create custom settings
public class MyApplicationSettings {
    public static final Setting<String> app_name = 
        Settings.setting("myapp.name", "MyNeo4jApp", "Application name");
    
    public static final Setting<Integer> worker_threads = 
        Settings.setting("myapp.worker_threads", 10, "Number of worker threads");
    
    public static final Setting<List<String>> allowed_hosts = 
        Settings.listSetting("myapp.allowed_hosts", String.class, 
                           List.of("localhost"), "Allowed host names");
}

// Use custom settings
DatabaseManagementService service = new DatabaseManagementServiceBuilder(dbPath)
    .setConfig(MyApplicationSettings.app_name, "ProductionApp")
    .setConfig(MyApplicationSettings.worker_threads, 20)
    .setConfig(MyApplicationSettings.allowed_hosts, List.of("app1.example.com", "app2.example.com"))
    .build();

Install with Tessl CLI

npx tessl i tessl/maven-org-neo4j--neo4j

docs

configuration.md

database-management.md

events.md

graph-database.md

graph-model.md

index.md

procedures.md

query-execution.md

schema.md

spatial.md

traversal.md

tile.json