我希望能够拥有类似的东西:
some-property: '#{${ENV_VAR_1:} == "someVal" ? boo + "someVal" : ${ENV_VAR_1}}'
这样可能吗?
当我目前尝试此操作时,出现错误:
原因:java.lang.IllegalArgumentException:操作数不能为null 在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.3.3.RELEASE.jar:5.1.3.RELEASE] ...省略了51个常见框架
答案 0 :(得分:4)
您还可以像下面那样在YML中使用SPEL-
some-property: '#{"${ENV_VAR_1:}".equals("someVal")?"boo" + "someVal":"${ENV_VAR_1:}"}'
答案 1 :(得分:0)
我认为您可以使用多配置文件代替if / else。像这样:
---
spring:
profiles: VAR_1
some-property: boo
---
spring:
profiles: VAR_2, VAR_3
some-property: foo
答案 2 :(得分:0)
您肯定在正确的轨道上;您正在传递一个SPEL
表达式,它看起来像是在试图求值。
似乎其中一个操作数是null
(因此Operand must not be null
)。
您必须要做到这一点,但是看起来像这样:
${ENV_VAR_1:}
正在评估null
。显然,它在解析三元数,这是您的堆栈跟踪的一部分,但是其中一个操作数需要具有一个值。我将为ENV_VAR
创建一个默认值,例如${ENV_VAR_1:default}
,然后查看解析是否适合您。否则,请检查boo
是否为null
并为此测试静态值。
答案 3 :(得分:0)
在您的application.yaml
中向您的spring.profiles.active
添加一个环境变量引用。
然后为每个条件添加配置文件,并为默认情况添加配置文件:
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