如果 Integer 属性不存在或者其当前值为 0,并且我无法使 0 比较正常工作,则我尝试将其设置为默认值 1。
原始值(如果设置)将通过命令行输入。
以下是我类(class)中的相关行:
@Configuration
public class AppConfig {
@Value("${${instance.procmultiplier} == 0 ? Integer.parseInt('1') : ${instance.procmultiplier}}")
public Integer procMultiplier;
}
我尝试了 @Value 注释的多种变体,在某一时刻,我发誓它识别了 0 值,但我无法回到该状态。我首先尝试简单地让它识别 0 值并默认为 1,然后我将尝试插入空检查。
有没有办法在同一个注释中同时完成这两项操作?我的一个想法是将空检查和 0 检查分成两个不同的属性,基本上在属性文件中包含 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,否则设置为通过命令行输入的任何内容?
最佳答案
看来我的问题是使用 ${...}
而不是 #{...}
。这是我使用两个不同属性的解决方案:
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 个属性一次性完成所有操作...
关于java - 当属性不存在或等于 0 时默认值的 SpEL (Spring) 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53820716/