Annotation Interface ConfigProperty
Can be used to annotate injection points of type TYPE
, Optional<TYPE>
or
javax.inject.Provider<TYPE>
, where TYPE
can be String
and all types which have appropriate
converters.
Injected values are the same values that would be retrieved from an injected
Config
instance or from the instance retrieved from
ConfigProvider.getConfig()
Examples
Injecting Native Values
The first sample injects the configured value of the my.long.property
property. The injected value does not
change even if the underline property value changes in the Config
.
Injecting a native value is recommended for a mandatory property and its value does not change at runtime or used by a bean with RequestScoped.
A further recommendation is to use the built in META-INF/microprofile-config.properties
file mechanism to
provide default values inside an Application. If no configured value exists for this property, a
DeploymentException
will be thrown during startup.
@Inject @ConfigProperty(name = "my.long.property") private Long injectedLongValue;
Injecting Optional Values
Contrary to natively injecting, if the property is not specified, this will not lead to a DeploymentException. The
following code injects a Long value to the my.optional.long.property
. If the property is not defined, the
value 123
will be assigned to injectedLongValue
.
@Inject @ConfigProperty(name = "my.optional.long.property", defaultValue = "123") private Long injectedLongValue;
The following code injects an Optional value of my.optional.int.property
.
@Inject @ConfigProperty(name = "my.optional.int.property") private Optional<Integer> intConfigValue;
Injecting Dynamic Values
The next sample injects a Provider for the value of my.long.property
property to resolve the property
dynamically. Each invocation to Provider#get()
will resolve the latest value from underlying
Config
again. The existence of configured values will get checked during
startup. Instances of Provider<T>
are guaranteed to be Serializable.
@Inject @ConfigProperty(name = "my.long.property" defaultValue="123") private Provider<Long> longConfigValue;
If ConfigProperty
is used with a type where no Converter
exists,
a deployment error will be thrown.
-
Optional Element Summary
Modifier and TypeOptional ElementDescriptionThe default value if the configured property does not exist.The key of the config property used to look up the configuration value. -
Field Summary
-
Field Details
-
UNCONFIGURED_VALUE
- See Also:
-
-
Element Details
-
name
String nameThe key of the config property used to look up the configuration value.If it is not specified, it will be derived automatically as
<class_name>.<injection_point_name>
, whereinjection_point_name
is the field name or parameter name,class_name
is the fully qualified name of the class being injected to.If one of the
class_name
orinjection_point_name
cannot be determined, the value has to be provided.- Returns:
- Name (key) of the config property to inject
- Default:
- ""
-
defaultValue
String defaultValueThe default value if the configured property does not exist. This value acts as a configure source with the lowest ordinal.If the target Type is not String, a proper
Converter
will get applied. Empty string as the default value will be ignored, which is same as not setting the default value. That means that any default value string should follow the formatting rules of the registered Converters. If a property has been emptied by a config source with a higher ordinal by setting an empty configuration value or by using a value causing the used converter returningnull
, the default value will not be used.- Returns:
- the default value as a string
- Default:
- "org.eclipse.microprofile.config.configproperty.unconfigureddvalue"
-