Синтаксис SpEL (Spring) для значения по умолчанию, когда свойство не существует или равно 0 - PullRequest
0 голосов
/ 17 декабря 2018

Я пытаюсь установить для свойства Integer значение по умолчанию, равное 1, если оно либо не существует, либо если его текущее значение равно 0, и я не могу на протяжении всей жизни заставить сравнение 0 работать правильно.

Исходное значение (если установлено) будет вводиться через командную строку.

Вот соответствующая строка в моем классе:

@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, если любое из них равно true, в противном случае установлено значение, указанное в командной строке?

Ответы [ 2 ]

0 голосов
/ 17 декабря 2018

Похоже, моя проблема заключалась в использовании ${...} вместо #{...}.Вот мое решение с использованием двух различных свойств:

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 свойством, хотя ...

0 голосов
/ 17 декабря 2018

Согласно этому посту вам следует попробовать

@Value("#{someBean.someProperty != null ? someBean.someProperty : 'default'}")
private String ternary;
...