当 属性 不存在或等于 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>
这将从系统属性中获取(如果存在),否则从 属性 文件中获取
我正在尝试将整数 属性 设置为默认值 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>
这将从系统属性中获取(如果存在),否则从 属性 文件中获取