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