Language: Java
Utilities/Configuration
Commons Configuration was created to simplify managing configuration data in Java applications. It abstracts the details of different configuration formats, allowing developers to read, write, and monitor configurations consistently. Features like hierarchical structures, interpolated variables, and reloading strategies make it ideal for enterprise and complex applications where configuration management is critical.
Apache Commons Configuration provides a unified API for accessing configuration data from various sources, including properties files, XML, INI, JSON, and databases. It supports hierarchical configurations, automatic reloading, and combined configuration sources.
Add dependency in pom.xml:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-configuration2</artifactId>
<version>2.9.1</version>
</dependency>Add dependency in build.gradle:
implementation 'org.apache.commons:commons-configuration2:2.9.1'Commons Configuration allows reading and writing configurations from multiple sources, combining different sources, handling hierarchical data, and monitoring changes. It supports properties, XML, JSON, INI, database-backed configurations, and more.
import org.apache.commons.configuration2.PropertiesConfiguration;
import org.apache.commons.configuration2.builder.fluent.Configurations;
Configurations configs = new Configurations();
PropertiesConfiguration config = configs.properties(new File("config.properties"));
String value = config.getString("app.name");
System.out.println(value);Loads a properties file and reads a configuration value.
import org.apache.commons.configuration2.XMLConfiguration;
XMLConfiguration xmlConfig = configs.xml(new File("config.xml"));
String dbUrl = xmlConfig.getString("database.url");
System.out.println(dbUrl);Reads a value from an XML configuration file.
import org.apache.commons.configuration2.HierarchicalConfiguration;
import org.apache.commons.configuration2.tree.ImmutableNode;
HierarchicalConfiguration<ImmutableNode> subConfig = xmlConfig.configurationAt("database");
String user = subConfig.getString("username");
System.out.println(user);Accesses a subsection of a hierarchical configuration.
import org.apache.commons.configuration2.CompositeConfiguration;
CompositeConfiguration composite = new CompositeConfiguration();
composite.addConfiguration(propertiesConfig);
composite.addConfiguration(xmlConfig);
String value = composite.getString("app.name");
System.out.println(value);Combines multiple configuration sources into one unified view.
import org.apache.commons.configuration2.builder.ReloadingFileBasedConfigurationBuilder;
import org.apache.commons.configuration2.builder.fluent.Parameters;
import org.apache.commons.configuration2.reloading.PeriodicReloadingTrigger;
ReloadingFileBasedConfigurationBuilder<PropertiesConfiguration> builder =
new ReloadingFileBasedConfigurationBuilder<>(PropertiesConfiguration.class)
.configure(new Parameters().fileBased().setFile(new File("config.properties")));
// Trigger reload every 5 seconds
PeriodicReloadingTrigger trigger = new PeriodicReloadingTrigger(builder.getReloadingController(), null, 5, TimeUnit.SECONDS);
trigger.start();Sets up automatic reloading of a properties file every 5 seconds.
config.addProperty("app.home", "/usr/local/app");
config.addProperty("app.log", "${app.home}/logs");
System.out.println(config.getString("app.log")); // Outputs /usr/local/app/logsSupports variable interpolation within configuration values.
Use CompositeConfiguration to merge multiple configuration sources cleanly.
Use hierarchical configurations for structured data like XML or JSON.
Leverage automatic reloading to update configuration without restarting the application.
Validate configuration values during startup to catch errors early.
Keep sensitive configuration (like passwords) in secure sources or environment variables.