Skip to content

Indexed Properties#

In MicroProfile Config, a config value with unescaped commas may be converted to Collection. It works for simple cases, but it becomes cumbersome and limited for more advanced use cases.

Indexed Properties provide a way to use indexes in config property names to map specific elements in a Collection type. Since the indexed element is part of the property name, it can also map complex object types. Consider:

# MicroProfile Config - Collection Values
my.collection=dog,cat,turtle

# SmallRye Config - Indexed Property
my.indexed.collection[0]=dog
my.indexed.collection[1]=cat
my.indexed.collection[2]=turtle

The indexed property syntax uses the property name and square brackets with an index in between.

A call to Config#getValues("my.collection", String.class), will automatically create and convert a List<String> that contains the values dog, cat and turtle. A call to Config#getValues("my.indexed.collection", String.class) returns the exact same result. The indexed property format is prioritized when both styles are found in the same configuration source. When available in multiple sources, the higher ordinal source wins, like any other configuration lookup.

The indexed property is sorted by its index before being added to the target Collection. Any gaps in the indexes do not resolve to the target Collection, which means that the Collection result will store all values without empty elements.