当前位置: 首页 > 知识库问答 >
问题:

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

朱修真
2023-03-14

如果Integer属性不存在,或者它的当前值为0,并且我一辈子都不能使0比较正常工作,我将尝试将其设置为默认值1。

@Configuration
public class AppConfig {

    @Value("${${instance.procmultiplier} == 0 ? Integer.parseInt('1') : ${instance.procmultiplier}}")
    public Integer procMultiplier;
}

有没有一种方法可以在同一个注释中同时完成这两项工作?我的一个想法是将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,否则设置为通过命令行输入的任何东西的想法吗?

共有1个答案

洪念
2023-03-14

我的问题似乎是使用${...}而不是#{...}。下面是我使用两个不同属性的解决方案:

bootstrap.properties

procmultiplier=${instance.procmultiplier:1}

@Configuration
public class AppConfig {

    @Value("#{${procmultiplier} == 0 ? 1 : ${procmultiplier}}")
    public Integer procMultiplier;
}

还允许缺少instance.procmultiplier参数。

我仍然不知道如何用一个财产一次完成所有的事情...

 类似资料:
  • 本文向大家介绍C#属性的默认值,包括了C#属性的默认值的使用技巧和注意事项,需要的朋友参考一下 示例 可以使用初始化程序(C#6)设置默认值 如果它是只读的,则可以返回如下值:            

  • 我试图添加一个带有默认值的请求参数,但是我希望默认值是登录的用户名。 我有一个方法getUsername(),它返回当前用户的名称,但我不能将注释的值设置为方法调用(或类属性)。这是我的方法: 我可以使RequestParam不是必需的,并在为null时填充它——但这感觉不是很优雅(或者说是spring风格)。还有其他方法可以做到这一点吗?

  • 20.1 属性默认值 Spring Boot支持的一些库使用缓存来提高性能。例如,模板引擎会缓存已编译的模板,以避免重复解析模板文件。此外,Spring MVC可以在服务静态资源时将HTTP缓存的头部添加到响应中。 虽然缓存功能对生产环境非常有益,但在开发过程中可能会产生反作用,使您无法看到程序中刚刚做出的更改。由于这个原因,spring-boot-devtools默认会禁用那些缓存选项。 缓存选

  • 今天我注意到这个node.js代码: 给出输出 这很奇怪;如果某物不等于0或大于0,那么它为什么大于或等于0呢?发生什么事了?

  • 我正在使用Spring boot 1.1.8,它使用Spring 4.0.7。我正在用@Value注释自动连接类中的属性。如果属性文件中没有该属性,我希望有一个默认值,因此,我使用“:”来指定默认值。下面是一个例子: 如果属性文件中不存在属性,则应将该变量赋值为false。但是,如果文件中存在属性,则它也会指定默认值并忽略属性值。例如,如果我定义了如上所述的属性,并且应用程序属性文件有如下内容那么

  • 问题内容: 我将 .properties 文件中的属性注入到 @Value 注释的字段中。但是,此属性提供敏感的凭据,因此我将它们从存储库中删除。我仍然希望在某些情况下想要运行项目并且没有带有默认值将设置为字段的凭据的.properties文件。 问题 即使我将默认值设置为字段本身,当.properties文件不存在时,也会出现异常: 这是带注释的字段: 我希望在这种情况下只设置普通的字符串“ s