Je veux pouvoir avoir quelque chose comme:
some-property: '#{${ENV_VAR_1:} == "someVal" ? boo + "someVal" : ${ENV_VAR_1}}'
Quelque chose comme ça est possible?
Quand j'essaye ceci actuellement, j'obtiens l'erreur: p>
Causé par: java.lang.IllegalArgumentException: l'opérande ne doit pas être nul à org.springframework.util.Assert.notNull (Assert.java:198) ~ [spring-core-5.1.3.RELEASE.jar: 5.1.3.RELEASE] à org.springframework.expression.spel.ast.SpelNodeImpl. (SpelNodeImpl.java:77) ~ [spring-expression-5.1.3.RELEASE.jar: 5.1.3.RELEASE] à org.springframework.expression.spel.ast.Ternary. (Ternary.java:40) ~ [spring-expression-5.1.3.RELEASE.jar: 5.1.3.RELEASE] à org.springframework.expression.spel.standard.InternalSpelExpressionParser.eatExpression (InternalSpelExpressionParser.java:183) ~ [spring-expression-5.1.3.RELEASE.jar: 5.1.3.RELEASE] à org.springframework.expression.spel.standard.InternalSpelExpressionParser.doParseExpression (InternalSpelExpressionParser.java:131) ~ [spring-expression-5.1.3.RELEASE.jar: 5.1.3.RELEASE] à org.springframework.expression.spel.standard.SpelExpressionParser.doParseExpression (SpelExpressionParser.java:61) ~ [spring-expression-5.1.3.RELEASE.jar: 5.1.3.RELEASE] à org.springframework.expression.spel.standard.SpelExpressionParser.doParseExpression (SpelExpressionParser.java:33) ~ [spring-expression-5.1.3.RELEASE.jar: 5.1.3.RELEASE] à org.springframework.expression.common.TemplateAwareExpressionParser.parseExpressions (TemplateAwareExpressionParser.java:121) ~ [spring-expression-5.1.3.RELEASE.jar: 5.1.3.RELEASE] à org.springframework.expression.common.TemplateAwareExpressionParser.parseTemplate (TemplateAwareExpressionParser.java:62) ~ [spring-expression-5.1.3.RELEASE.jar: 5.1.3.RELEASE] à org.springframework.expression.common.TemplateAwareExpressionParser.parseExpression (TemplateAwareExpressionParser.java:49) ~ [spring-expression-5.1.3.RELEASE.jar: 5.1.3.RELEASE] à org.springframework.context.expression.StandardBeanExpressionResolver.evaluate (StandardBeanExpressionResolver.java:142) ~ [spring-context-5.1.3.RELEASE.jar: 5.1.3.RELEASE] ... 51 cadres communs omis
4 Réponses :
Je pense que vous pouvez utiliser plusieurs profils au lieu de if / else. comme ceci:
--- spring: profiles: VAR_1 some-property: boo --- spring: profiles: VAR_2, VAR_3 some-property: foo
Vous êtes définitivement sur la bonne voie; vous passez une expression SPEL
qui semble vouloir être évaluée.
Il semble que l'un des opérandes soit null
(d'où le opérande ne doit pas être nul
).
Vous devrez préciser ceci, mais cela ressemble à:
${ENV_VAR_1:}
Est évalué à null
. Il analyse clairement un ternaire, qui fait partie de votre stacktrace, mais l'un de ces opérandes doit avoir une valeur. Je créerais une valeur par défaut pour les ENV_VAR
, comme $ {ENV_VAR_1: default}
et verrais si l'analyse fonctionne pour vous. Sinon, vérifiez si boo
est null
et testez avec une valeur statique pour cela.
Dans votre application.yaml
, ajoutez une référence de variable d'environnement à votre spring.profiles.active
.
Ajoutez ensuite des profils pour chaque condition et un profil pour la valeur par défaut cas:
spring: profiles: active: - ${ENV_VAR_1:default} --- spring: profiles: default some-property: defaultValue --- spring: profiles: env1 some-property: env1Value --- spring: profiles: env2 some-property: env2Value
vous pouvez également faire comme ci-dessous en utilisant SPEL dans YML -
some-property: '#{"${ENV_VAR_1:}".equals("someVal")?"boo" + "someVal":"${ENV_VAR_1:}"}'
Je pense que vous pouvez trouver votre réponse sur ce lien: https://stackoverflow.com/questions/23934213/conditional-che ck-in-yaml-file-to-s comment-le-bon-conte nt
Nous avons trouvé une belle solution sans SpEL ici: stackoverflow.com/a/56321961/2032157