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

时间:2018-12-17 17:58:56

标签: java spring spring-boot spring-el

我正在尝试将Integer属性设置为默认值1,如果它不存在或当前值是0,并且我一生都无法使0比较正常工作。 / p>

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

这是我班上的相关内容:

@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的任何想法,如果为true,则默认为1,否则设置为通过命令行输入的任何内容?

2 个答案:

答案 0 :(得分:1)

根据this post,您应该尝试

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

答案 1 :(得分:1)

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

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参数。

尽管如此,我仍然不知道如何一口气完成所有这一切……