J'ai le fichier de propriétés application-dev.yml avec le contenu:
some.value: ${config.some.value}
et un autre application-staging.yml avec le contenu:
spring.profiles: staging config.some.value: - ELEMENT1 - ELEMENT2 - ELEMENT3
donc je ne connais pas la taille de la liste. Lorsque je référence cette liste dans application.yml principale comme ceci:
spring.profiles: dev config.some.value: - ELEMENT1 - ELEMENT2
J'obtiens Impossible de convertir la valeur de propriété de type 'java. lang.String 'au type requis' java.util.List 'pour la propriété' value '. Comment le référencer correctement?
6 Réponses :
  @Autowired    private YAMLConfig myConfig; private List<String> SomeValues= myConfig.SomeValues();
Je ne peux pas changer de code. Je dois le faire uniquement dans les fichiers .yml.
Vous pouvez créer votre propre classe de configuration qui définit la valeur de cette propriété comme vous le souhaitez.
S'il vous plaît, jetez un œil à cet exemple:
Lors de l'utilisation de tableaux de chaînes, le premier et le seul élément PEUT être joint par des virgules - le résultat final est le même qu'une liste. Cela signifie que vous pouvez définir votre variable comme ceci:
config.some.value: ELEMENT1, ELEMENT2, ELEMENT3
ensuite, dans la section de votre profil, vous pouvez référencer la valeur de configuration comme s'il s'agissait d'une chaîne normale:
someValues: $ {config.some.value}
(J'ai peur,) Vous auriez à le référencer comme ça:
application.yaml:
some.value:
-${config.some.value[0]}
-${config.some.value[1]}
-${config.some.value[2]}
... et je prévois des problèmes, quand il y a no $ {config.some.value [2]} (les tailles de liste sont incohérentes .. -> approche de la solution: essayez de "factice" / "noop").
Réf. :
Une façon serait d'utiliser des listes séparées par des virgules dans vos profils:
YAML lists are represented as comma-separated values (useful for simple String values) and also as property keys with [index] dereferencers, for example this YAML:
servers:
- dev.bar.com
- foo.bar.com
Would be transformed into these properties:
servers=dev.bar.com,foo.bar.com
servers[0]=dev.bar.com
servers[1]=foo.bar.com
some.value: ${config.some.value}
Ensuite, vous devriez pouvoir y accéder dans application.yml
spring.profiles: staging config.some.value: ELEMENT1,ELEMENT2,ELEMENT3
Cette solution ne nécessite pas de liste de connaissances taille à l'avance.
Explication
La raison pour laquelle cela fonctionne est décrite ici . Plus précisément:
spring.profiles: dev config.some.value: ELEMENT1,ELEMENT2
En particulier, cela signifie que si vous spécifiez une liste de chaînes séparées par des virgules dans application.yml et définissez List comme valeur dans @ConfigurationProperties , le classeur de propriétés de configuration de ressort convertira cette liste de chaînes séparées par des virgules en List.
C'est la meilleure façon de créer un fichier .yml avec plusieurs valeurs:
@Value("${spring.config.some.values}")
private String[] values;
Lorsque nous utilisons des fichiers .yml, nous vous recommandons de séparer chaque mot. Pour lire les valeurs, utilisez:
spring:
profiles: dev
config:
some:
values: ELEMENT1,ELEMENT2
J'espère que cela vous aidera.
alors qu'est-ce que tu veux faire exactement? vous voulez inclure
stagingetdevdansdefaultapplication.yml?