@Retention(value=RUNTIME)
 @Target(value={METHOD,FIELD,PARAMETER,TYPE})
public @interface ConfigProperty
 Can be used to annotate injection points of type TYPE, Optional<TYPE> or
 jakarta.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()
 
 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;
 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;
 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.
| Modifier and Type | Fields and Description | 
|---|---|
| static java.lang.String | UNCONFIGURED_VALUE | 
| Modifier and Type | Optional Element and Description | 
|---|---|
| java.lang.String | defaultValueThe default value if the configured property does not exist. | 
| java.lang.String | nameThe key of the config property used to look up the configuration value. | 
public abstract java.lang.String name
 If it is not specified, it will be derived automatically as <class_name>.<injection_point_name>, where
 injection_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 or injection_point_name cannot be determined, the value has to be
 provided.
public abstract java.lang.String defaultValue
 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 returning null, the default value will not be used.