当 属性 不存在或等于 0 时,默认值的 SpEL (Spring) 语法

SpEL (Spring) syntax for default value when property non-existant or equal to 0

我正在尝试将整数 属性 设置为默认值 1,如果它不存在或者它的当前值为 0 而我终生无法获得 0比较正常工作。

原始值(如果已设置)将通过命令行输入。

这是我的 class 中的相关行:

@Configuration
public class AppConfig {

    @Value("${${instance.procmultiplier} == 0 ? Integer.parseInt('1') : ${instance.procmultiplier}}")
    public Integer procMultiplier;
}

我已经尝试了多种 @Value 注释的变体,有一次,我发誓它识别了 0 值,但我无法回到那个状态。我首先尝试简单地让它识别 0 值并默认为 1,然后我将尝试插入空值检查。

有没有办法在同一个注释中同时完成这两项工作?我的一个想法是将 null-check 和 0-check 分成两个不同的属性,基本上在属性文件中有 procmultiplier=${instance.procmultiplier:1},然后将注释更改为 @Value("${${procmultiplier} == 0 ? Integer.parseInt('1') : ${procmultiplier}}") 但我尝试的任何方法都不起作用。

我的命令是:mvn clean package && java -Dspring.profiles.active=json -Dinstance.procmultiplier=0 -jar target/MyApp-0.0.1-SNAPSHOT.jar.

属性 最终等于我在命令行上设置的值。

关于如何检查不存在和 0 的任何想法,如果其中一个为真则默认为 1,否则设置为通过命令行输入的任何内容?

根据 this post 你应该试试

@Value("#{someBean.someProperty != null ? someBean.someProperty : 'default'}")
private String ternary;

看来我的问题是使用 ${...} 而不是 #{...}。这是我使用两个不同属性的解决方案:

bootstrap.properties

procmultiplier=${instance.procmultiplier:1}

AppConfig.java

@Configuration
public class AppConfig {

    @Value("#{${procmultiplier} == 0 ? 1 : ${procmultiplier}}")
    public Integer procMultiplier;
}

命令行: mvn clean package && java -Dspring.profiles.active=json -Dinstance.procmultiplier=0 -jar target/MyApp-0.0.1-SNAPSHOT.jar

还允许缺少 instance.procmultiplier 参数。

我仍然不知道如何用 1 属性 一次完成所有操作...

这在 xml 对我有用:

<bean id="myBean" class="myClass" >
    <property name="myProp" value="#{systemProperties['a.b'] ?: '${a.b}'}"/>
</bean>

这将从系统属性中获取(如果存在),否则从 属性 文件中获取