Skip to main content

Config Overview Basics

The juneau-config library contains a powerful API for creating and using INI-style config files.

Example configuration file
# A set of entries
[Section1]

# An integer
key1 = 1

# A boolean
key2 = true

# An array
key3 = 1,2,3

# A POJO
key4 = http://bar

Config files are accessed through the Config class which are created through the Config.Builder class.

Builder creator methods are provided on the Config class:

// Create a Config object
Config config = Config.create().name("MyConfig.cfg").build();

// Shortcut
Config config = Config.create("MyConfig.cfg").build();

Once instantiated, reading values from the config are simple:

// Read values from section #1
int key1 = config.get("Section1/key1").asInteger().orElse(-1);
boolean key2 = config.get("Section1/key2").asBoolean().orElse(false);
int[] key3 = config.get("Section1/key3").as(int[].class).orElse(null);
URL key4 = config.get("Section1/key4").as(URL.class).orElse(null);

The config language may look simple but it is a very powerful feature with many capabilities including:

  • Support for storing and retrieving any of the following data types:
    • Primitives
    • POJOs
    • Beans
    • Arrays, Maps, and Collections of anything
    • Binary data
  • Transactional modifications with commit/rollback capabilities.
  • A listener API.
  • Filesystem watcher integration allowing changes on the file system to be reflected in real-time.
  • Modifications through the Config class (e.g. add/remove/modify sections and keys, add/remove comments and whitespace, etc...) DO NOT cause loss of formatting in the file. All existing whitespace and comments are preserved for you!
  • Value encoding for added security.
  • Support for SVL variables.
  • Directly populate beans from config sections.
  • Accessing config sections through Java interface proxies.
  • An extensible storage API allows you to write your own config storage (e.g. storage in databases or the cloud).