Les ressources cachées des Properties
En ouvrant le fichier “.properties” fourni par défaut avec Hibernate, j’ai été surpris par la syntaxe suivante :
hibernate.query.substitutions yes 'Y', no 'N'
En effet, j’avais toujours renseigné mes fichiers de propriétés en java, que ce soit en Hibernate ou autre, de la forme “standard” :
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
Pensant que ces fichiers étaient lus par Hibernate avec son propre parser j’ai tout de même vérifié dans la javadoc ce qu’il en était.
La réponse se trouve dans la méthode load de la classe java.util.Properties
La javadoc nous apprend qu’il est donc est effectivement possible, en plus du séparateur =, d’avoir ceci :
clef valeur
le deux-points “:” est également accepté
clef:valeur clef :valeur
(A titre de comparaison, certains langages de sérialisation de données utilisent exclusivement le deux-points pour le couple clef:valeur comme YAML (YAML Ain’t Markup Language))
Alors, lequel de ces séparateurs utiliser ? Est-ce une simple questions d’habitude, ou de lisibilité ?
Les fichiers de configuration font partie du code, qui reste la première source de documentation pour le développeur.
A votre avis, laquelle de ces lignes est la plus lisible ?
hibernate.query.substitutions yes 'Y', no 'N' hibernate.dialect : org.hibernate.dialect.IngresDialect hibernate.connection.driver_class = com.ingres.jdbc.IngresDriver
Le format des fichiers Properties possède également d’autres particularités.
Par exemple, il est possible d’utiliser les caractères “espace”, “:” ou même “=” au sein de la clef : il suffit alors de les échapper avec un antislash “”
cl:=ef = valeur
Et la ligne suivante :
clef
associe la chaine vide “” à “clef”
Il est également possible de répartir la valeur sur plusieurs lignes. Il suffit pour cela de placer un “” en bout de ligne :
fruits apple, banana, pear, cantaloupe, watermelon, kiwi, mango
Force est de constater que même une classe aussi anodine et bien connu (…ou pas) que Properties recèle bien des surprises.