ConfigProvider
Point d’entrée pour accéder à la configuration.
public final class ConfigProvider {
public static Config getConfig();
public static ConfigBuilder getConfigBuilder();
}
getConfig()
Retourne une instance Config mise en cache avec les sources de configuration et les convertisseurs par défaut.
Config config = ConfigProvider.getConfig();
String value = config.getValue("key", String.class);
Équivalent à :
ConfigBuilder builder = ConfigProvider.getConfigBuilder();
Config config = builder.build();
Config
Interface de configuration principale pour lire les propriétés.
public interface Config extends AutoCloseable {
<T> T getValue(String propertyName, Class<T> propertyType);
<T> Optional<T> getOptionalValue(String propertyName, Class<T> propertyType);
Iterable<String> getPropertyNames();
Iterable<ConfigSource> getConfigSources();
}
getValue()
Obtenir une propriété requise, convertie au type cible.
String name = config.getValue("app.name", String.class);
int port = config.getValue("app.port", int.class);
List<String> items = config.getValue("app.items", List.class);
Lève NoSuchElementException si la clé n’est pas trouvée.
getOptionalValue()
Obtenir une propriété optionnelle.
Optional<String> version = config.getOptionalValue("app.version", String.class);
String v = version.orElse("1.0.0");
Retourne Optional.empty() si la clé n’est pas trouvée ; ne lève pas d’exception.
ConfigBuilder
Builder programmatique pour les instances Config.
public interface ConfigBuilder {
ConfigBuilder withSources(ConfigSource... sources);
ConfigBuilder withConverters(Converter<?>... converters);
<T> ConfigBuilder withConverter(Class<T> type, Converter<T> converter);
Config build();
}
withSources()
Ajouter des sources de configuration personnalisées.
builder.withSources(
new DatabaseConfigSource(),
new RemoteConfigSource()
);
Les sources sont ajoutées à la cascade en plus des sources built-in.
withConverters()
Ajouter plusieurs convertisseurs à la fois.
builder.withConverters(
new ColorConverter(),
new DurationConverter()
);
ConfigSource
SPI pour implémenter des sources de configuration personnalisées.
public interface ConfigSource {
String getName();
int getOrdinal();
String getValue(String propertyName);
Map<String, String> getProperties();
}
Converter
SPI pour implémenter les convertisseurs de types.
public interface Converter<T> {
T convert(String value);
}
Implémentez pour convertir les valeurs de chaîne en types personnalisés :
public class ColorConverter implements Converter<Color> {
@Override
public Color convert(String value) {
if (value.startsWith("#")) {
return Color.decode(value);
}
// ... autre logique de parsing
throw new IllegalArgumentException("Invalid color: " + value);
}
}
@ConfigProperty
Annotation d’injection CDI (de la spec MicroProfile Config).
@Inject
@ConfigProperty("key")
String value;
@Inject
@ConfigProperty(name = "key", defaultValue = "default")
String valueWithDefault;
@Inject
@ConfigProperty("key")
Optional<String> optionalValue;
Attributs :
* name — clé de configuration
* defaultValue — valeur de repli si la clé n’est pas trouvée (rend l’injection optionnelle)
ConfigSourceProvider
SPI pour la découverte dynamique de sources.
public interface ConfigSourceProvider {
Iterable<ConfigSource> getConfigSources(ClassLoader forClassLoader);
}
Implémentez pour fournir plusieurs sources en fonction des conditions runtime :
public class MySourceProvider implements ConfigSourceProvider {
@Override
public Iterable<ConfigSource> getConfigSources(ClassLoader cl) {
return List.of(
new Source1(),
new Source2()
);
}
}
Mappage des variables d’environnement
Les variables d’environnement sont automatiquement mappées aux clés de propriétés :
| Var env | Clé config |
|---------|------------|
| APP_NAME | app.name |
| APP_DB_HOST | app.db.host |
| my_property | my.property |
| MY_PROPERTY | my.property |
La casse est normalisée en minuscules ; les traits de soulignement et les points sont traités de manière équivalente.
Motifs de noms de propriété
-
Caractères valides :
a-z,0-9,.,-,_ -
Insensible à la casse (mais conventionnellement en minuscules)
-
Hiérarchique via
.(p. ex.,app.database.host)
Propriétés spéciales
-
mp.config.profile— profil de configuration actif (propriété système uniquement)