我正在尝试将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,否则设置为通过命令行输入的任何内容?
答案 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
参数。
尽管如此,我仍然不知道如何一口气完成所有这一切……