Contactez-nous

Syntaxe YAML vs Properties

Comprenez les différences de syntaxe entre les fichiers application.properties et application.yml pour la configuration Spring Boot. Avantages et inconvénients de chaque format.

Deux formats pour une même configuration : une question de style

Spring Boot offre une flexibilité bienvenue en supportant nativement deux formats de fichiers principaux pour externaliser la configuration : le format traditionnel Java .properties et le format plus moderne et structuré YAML (.yml ou .yaml). Bien qu'ils servent le même objectif fondamental – définir des paires clé-valeur pour configurer l'application – leur syntaxe et leur approche de la structuration des données diffèrent sensiblement. Le choix entre les deux dépend souvent de la complexité de la configuration, des préférences de l'équipe et de la lisibilité souhaitée.

Comprendre les nuances de chaque syntaxe est essentiel pour écrire des fichiers de configuration corrects et maintenables. Examinons en détail comment chaque format représente les données et quels sont leurs avantages et inconvénients respectifs.

Le format Properties (.properties) : la simplicité classique

Le format .properties est le format standard de Java depuis longtemps. Sa syntaxe est très simple et repose sur des paires clé-valeur, une par ligne :

cle=valeur
# ou
cle: valeur

Les commentaires commencent par # ou !.

Pour représenter des structures hiérarchiques, on utilise une notation pointée (dotted notation) pour les clés. Chaque niveau de la hiérarchie est séparé par un point.

# Hiérarchie
server.port=8080
spring.datasource.url=jdbc:mysql://localhost/mabdd
spring.datasource.username=user

Les listes ou tableaux sont généralement représentés en utilisant des indices entre crochets dans la clé :

# Liste
mes.serveurs[0]=srv1.example.com
mes.serveurs[1]=srv2.example.com

Avantages :

  • Syntaxe très simple et facile à apprendre.
  • Format standard Java, largement connu.
  • Facile à parser par des programmes.

Inconvénients :

  • Peut devenir très répétitif pour les structures hiérarchiques profondes (répétition constante des préfixes).
  • Moins lisible pour les configurations complexes avec beaucoup d'imbrication ou de listes.
  • Pas de moyen standard intégré pour représenter des types de données complexes (tout est essentiellement chaîne de caractères, la conversion est faite par Spring).

Le format YAML (.yml) : structure et lisibilité

YAML (acronyme récursif pour "YAML Ain't Markup Language") est un format de sérialisation de données conçu pour être facilement lisible par les humains. Sa structure repose principalement sur l'indentation (avec des espaces, jamais de tabulations) pour définir la hiérarchie.

La syntaxe de base est clé: valeur (attention à l'espace après les deux-points, il est obligatoire). Les commentaires commencent par #.

La hiérarchie est représentée naturellement par l'indentation. Les éléments au même niveau d'indentation appartiennent au même objet (map) :

# Hiérarchie
server:
  port: 8080 # Indenté sous server
spring:
  datasource:
    url: jdbc:mysql://localhost/mabdd # Indenté sous datasource, qui est sous spring
    username: user

Les listes ou tableaux sont représentés par des tirets (-) précédés d'une indentation appropriée :

# Liste
mes:
  serveurs:
    - srv1.example.com # Elément 1 de la liste
    - srv2.example.com # Elément 2 de la liste

YAML supporte également des fonctionnalités plus avancées comme les ancres et les alias (pour éviter la répétition), les types de données explicites (bien que souvent non nécessaires avec Spring Boot) et les chaînes de caractères multi-lignes.

# Chaîne multi-lignes
mon:
  message: |
    Ceci est un message
    sur plusieurs lignes.
    L'indentation est préservée.

Avantages :

  • Très lisible pour les humains, en particulier pour les structures complexes.
  • Représente naturellement la hiérarchie et les listes.
  • Moins de répétition de clés que le format .properties.
  • Syntaxe concise.

Inconvénients :

  • La syntaxe est sensible à l'indentation (une erreur d'espacement peut casser la structure). L'utilisation d'espaces est obligatoire, les tabulations sont interdites.
  • Léger surcoût au parsing par rapport à .properties.
  • Moins universellement connu que le format .properties dans l'écosystème Java historique (bien que très populaire aujourd'hui).

Conclusion : choisir le bon outil

Spring Boot traite les deux formats de manière transparente. Que vous utilisiez application.properties ou application.yml, les noms des propriétés que vous référencez dans votre code (par exemple via @Value("${server.port}") ou @ConfigurationProperties(prefix = "spring.datasource")) restent les mêmes. La structure logique de la configuration est identique.

Le choix se résume donc souvent à :

  • .properties : Préférable pour des configurations simples, des équipes habituées à ce format, ou lorsque la simplicité brute prime.
  • .yml : Préférable pour des configurations complexes avec beaucoup de hiérarchie ou de listes, lorsque la lisibilité est une priorité, ou pour des équipes à l'aise avec la syntaxe YAML.

De nombreux projets Spring Boot modernes tendent à adopter YAML pour sa lisibilité améliorée dans les scénarios complexes, mais .properties reste une option parfaitement viable et robuste.