如果一个Integer属性不存在,或者它的当前值是0,并且我终生不能正确地进行0比较,我会尝试将该属性设置为默认值1。
原始值(如果设置)将通过命令行传入。
下面是我的类中的相关代码行:
@Configuration
public class AppConfig {
@Value("${${instance.procmultiplier} == 0 ? Integer.parseInt('1') : ${instance.procmultiplier}}")
public Integer procMultiplier;
}我已经尝试了@Value注释的许多变体,我发誓它曾经识别出0值,但我无法回到那个状态。我首先尝试简单地让它识别0值并默认为1,然后我将尝试插入一个null-check。
有没有办法在同一个注解中同时做这两件事?我的一个想法是将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,或者通过命令行设置为任何值,有什么想法吗?
发布于 2018-12-18 02:26:53
我的问题似乎是使用${...}而不是#{...}。下面是我使用两个不同属性的解决方案:
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个属性一次完成所有这些事情…
发布于 2018-12-18 02:01:36
根据this post的说法,你应该试试
@Value("#{someBean.someProperty != null ? someBean.someProperty : 'default'}")
private String ternary;发布于 2021-11-28 10:37:30
这对我在xml中是有效的:
<bean id="myBean" class="myClass" >
<property name="myProp" value="#{systemProperties['a.b'] ?: '${a.b}'}"/>
</bean>如果存在,将从系统属性中获取,否则从属性文件中获取
https://stackoverflow.com/questions/53820716
复制相似问题