Nous devons charger plusieurs fichiers de propriétés ensemble et les utiliser comme une source de propriétés. <util:properties>
vous permet de passer une liste de fichiers séparés par des virgules et tout fonctionne bien jusqu'à présent. Donc, ce qui suit est bon:Problème lors du chargement de plusieurs fichiers de propriétés avec Spring <util: properties /> lorsque la liste de fichiers est un paramètre
<util:properties loaction="conf/file1.properties,conf/file2.properties,abc-*.properties" />
Cependant, dans notre cas, la liste des fichiers de propriétés est pas fixe et il vient d'une autre propriétés de maître fichier qui est chargé avant. Nous voulons passer cette liste à <util:properties>
en tant que paramètre, mais cela ne fonctionne pas.
<util:properties location="${allPropertiesFiles}" />
Où ${allPropertiesFiles}
est défini comme
allPropertiesFiles=conf/file1.properties,conf/file2.properties,abc-*.properties
Cela échoue à cause de virgules dans la liste des fichiers. Il les traite comme un nom de fichier unique et lève FileNotFoundException.
Je me demande à quel moment Spring tente de diviser les fichiers par des virgules et il semble que cela se produise avant de résoudre $ {allPropertiesFiles}. Par exemple, si je fais comme ci-dessous, cela fonctionne bien, mais ce n'est pas une solution pratique pour nous car nous ne savons pas combien de fichiers sont inclus dans cette liste.
<util:properties location="${propFile.location1},${propFile.location2},${propFile.location3}" />
MISE À JOUR:
Il semble être un problème de printemps avec le traitement et le fractionnement avec « » avant la résolution de la valeur de la propriété dans ${...}
. J'ai même essayé d'utiliser Spring EL pour le diviser mais il échoue à nouveau en analysant le EL valide, car il le casse d'abord en fonction de ',' puis évalue l'expression. L'exemple ci-dessous échoue avec l'exception EL parse:
<util:properties location="#{'${allPropertiesFiles}'.split(',')}" />
FYI cette observation est avec Spring 4.2.x. Toute suggestion est très appréciée.
Vous aviez besoin de guillemets doubles car vous transmettiez la liste des fichiers de propriétés en argument jvm et il y a un espace après la virgule dans votre liste. Ma liste provient d'un autre fichier de propriétés et si je l'entoure de "" cela devient une partie de la valeur de la propriété. – user3739116
Deuxièmement, j'ai essayé votre exemple et cela ne fonctionne que pour moi si la liste est passée en argument jvm avec Spring 4.3.x. Les versions antérieures de Spring (par exemple, 4.2.x) échouent toujours en raison de la virgule dans la liste. Nous sommes sur Spring 4.2.x maintenant et nous ne pouvons pas mettre à jour pour le moment. Troisièmement, votre exemple échoue lorsque j'ai essayé de passer la liste d'un fichier de propriétés qui est chargé par ''. On dirait que Spring 4.3.x gère mieux jvm arg, je ne sais pas pourquoi. S'il vous plaît laissez-moi savoir si j'ai tort. –
user3739116