Spring SpEL:如何将一个属性的值基于另一个属性

问题描述

我想在Spring Boot应用程序中设置2个属性的值,其中第二个属性严格基于第一个属性

@Value("${main.propertyOne: 0.67}")
 void setPropertyOne(float propertyOne) {
    this.propertyOne = propertyOne;
 }

@Value("#{${main.propertyTwo:(${main.propertyOne: 0.67} + 0.10)}}")
 void setPropertyTwo(float propertyTwo) {
     this.propertyTwo = propertyTwo;
 }

通过这种方法propertyOne始终正确设置为认值(0.67)或我在属性文件中设置的认值,但是propertyTwo还是我在属性文件中设置的值。属性文件(可以)或0.77。实际上,它实际上从未基于propertyOne的值。

我想要的行为是:

  • 如果propertyOne设置为0.48,而propertyTwo未设置,则认为0.48 + 0.10 = 0.58
  • 如果未设置propertyOne,则认值为0.67,propertyTwo认为0.67 + 0.10 = 0.77

这是可以做的吗?

解决方法

使用

@Value("#{${main.propertyTwo:(T(Float).parseFloat('${main.propertyOne: 0.67}') + 0.10)}}")