【发布时间】:2018-09-20 05:22:52
【问题描述】:
我在我的 Spring Boot 应用程序中添加了一个属性文件,我用它来为我的程序初始化一些值。这适用于简单的值,也适用于一些稍微复杂的值,例如我为 value.a 和 value.b 创建的示例,如下所示。
my.value.a=a
my.value.b=b
value.a = #{ systemEnvironment['MY_VALUE_A'] != null ? systemEnvironment['MY_VALUE_A'] : '${my.value.a}' }
value.b = #{ systemEnvironment['MY_VALUE_B'] != null ? systemEnvironment['MY_VALUE_B'] : '${my.value.b}' }
我想做一些花哨的事情来组合这些,就像下面的 value.c 一样,但是,这给了我一个错误。这是我试图为属性文件做一些复杂的事情吗?还是我在这里某处犯了错误?
value.c = #{ systemEnvironment['MY_VALUE_C'] != null ? systemEnvironment['MY_VALUE_C'] : '#{ ${value.a}:${value.b} }' }
它不会像这样用 value.c 编译,但会给出一个带有错误的堆栈跟踪:
InvocationTargetException:创建名为“MyProperties”的 bean 时出错:通过方法“setValueC”参数 0 表达的依赖关系不满足;嵌套异常是 org.springframework.beans.factory.BeanExpressionException:表达式解析失败;嵌套异常是 org.springframework.expression.spel.SpelParseException: EL1041E: 解析有效表达式后,表达式中还有更多数据:'hash(#)' -> [帮助1]
要在 Java 中设置值,我有一个属性文件,设置值的方法如下所示:
@Value("${value.a}")
public void setValueA(String value) {
this.a = value;
}
@Value("${value.b}")
public void setValueB(String value) {
this.b = value;
}
@Value("${value.c}")
public void setValueC(String value) {
this.c = value;
}
我试图实现的输出是 value.c 以 a:b 的形式出现 - 或任何环境变量 a 和 b 被替换,用冒号分隔。
我对此不是很熟悉,所以我可能会完全错了。有可能以这种方式实现我想要的吗?如果是,我做错了什么?
【问题讨论】:
-
您不能嵌套 SPEL。据我所知,它不支持
-
我在 value.a 和 value.b 中嵌套了占位符,嵌套在一个表达式中,但是 value.c 有一个表达式嵌套在一个表达式中,现在你提到它可能不支持快速谷歌.谢谢你的评论,你让我有些头疼。
标签: java spring spring-boot properties spring-el