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

标签 java spring spring-boot spring-el

如果 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/

相关文章:

java - Maven 根据配置文件更新属性

java - 如何将 querydsl-mongodb 添加到 Spring Boot Gradle 5.6.1 项目

java - 字符串数组大小和 for 循环访问元素

java - java中printf和println的区别?

java - 兔子 : Failed message being reprocessed in an infinite loop

java - 无法在第三方 tomcat 服务器上正确访问 Spring 应用程序

spring - 在 Spring 3.0 中使用 jdbcTemplate 时出现空指针异常

spring - 如何在Spring Boot API中通过requestbody获取对象列表

java - 使用 REST Web 服务触发批处理作业

java - 以编程方式将字体嵌入到 docx4j 文档中(在 XHTML - DOCX 转换期间)