Neo4j Community Edition - The world's leading Graph Database with Cypher query language and ACID transactions.
—
Type-safe configuration system with validation, default values, and property file loading for customizing database behavior, performance, and security settings with comprehensive setting management.
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();
}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();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);
}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