Как правильно указать значение по умолчанию в аннотации Spring @Value?
Вначале у меня есть следующая спецификация:
@Value("#{props.isFPL}")
private boolean isFPL=false;
Это прекрасно работает, получая значение из файла свойств:
isFPL = true
Однако следующее выражение по умолчанию приводит к ошибке:
@Value("#{props.isFPL:false}")
private boolean isFPL=false;
Не удалось выполнить синтаксический анализ выражений; Вложенное исключение - org.springframework.expression.spel.SpelParseException: EL1041E: (поз. 28): после разбора допустимого выражения в выражении еще больше данных: "двоеточие (:)"
Я также пытался использовать $вместо #.
@Value("${props.isFPL:true}")
private boolean isFPL=false;
Тогда значение по умолчанию в аннотации отлично работает, но я не получил правильное значение из файла свойств:
Ответы
Ответ 1
Попробуйте использовать $следующим образом
@Value("${props.isFPL:true}")
private boolean isFPL=false;
также убедитесь, что для параметра ignore-resource-no-found установлено значение true, чтобы в случае отсутствия файла свойства было принято значение по умолчанию.
Кроме того, поместите следующее в
файл контекста при использовании конфигурации на основе xm:
<context:property-placeholder ignore-resource-not-found="true"/>
в классе конфигурации. При использовании конфигураций Java:
@Bean
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
PropertySourcesPlaceholderConfigurer p = new PropertySourcesPlaceholderConfigurer();
p.setIgnoreResourceNotFound(true);
return p;
}
Ответ 2
Использует ли ваш контекстный файл приложения Spring более одного свойстваPlaceholder beans, как показано ниже:
<context:property-placeholder ignore-resource-not-found="true" ignore-unresolvable="true" location="classpath*:/*.local.properties" />
<context:property-placeholder location="classpath:/config.properties" />
Если это так, то поиск свойств для: props.isFPL будет выполняться только для первого файла свойства (.local.properties), если свойство не найдено, значение по умолчанию (true) вступит в силу, а второй файл свойства ( config.properties) эффективно игнорируется для этого свойства.
Ответ 3
Для переменной int
:
@Value("${my.int.config: #{100}}")
int myIntConfig;
Примечание. нет пробела перед двоеточием, но дополнительное пространство после двоеточия.
Ответ 4
В зависимости от того, как вы загружаете свои свойства, если вы используете что-то вроде
<context:property-placeholder location="classpath*:META-INF/spring/*.properties" />
Тогда @Value
должно выглядеть как
@Value("${isFPL:true}")
Ответ 5
Для String вы можете по умолчанию иметь нулевое значение:
public UrlTester(@Value("${testUrl:}") String url) {
this.url = url;
}