получить свойства из application.properties при весенней загрузке

Я хочу получать значения с помощью аннотации @Value из application.properties в веб-проекте весенней загрузки. Я думал, что могу просто использовать аннотацию @Value, потому что думал, что переменные в application.properties просто загружаются на лету. Но когда я пишу только аннотацию @Value, это не работает.

У меня есть недвижимость в application.poperties

google.recaptcha.site-key=???

И я хотел загрузить значение, поэтому я закодировал, как показано ниже.

@Controller
@RequestMapping("/member")
public class MemberController extends BaseController{

    @Value("#{google.recaptcha.site-key}")
    public String recaptchaSiteKey; 

}

Но при компиляции кода eclipse возвращает ошибку.

Caused by: org.springframework.expression.spel.SpelEvaluationException: EL1008E: Property or field 'google' cannot be found on object of type 'org.springframework.beans.factory.config.BeanExpressionContext' - maybe not public?
    at org.springframework.expression.spel.ast.PropertyOrFieldReference.readProperty(PropertyOrFieldReference.java:226) ~[spring-expression-4.3.12.RELEASE.jar:4.3.12.RELEASE]
    at org.springframework.expression.spel.ast.PropertyOrFieldReference.getValueInternal(PropertyOrFieldReference.java:94) ~[spring-expression-4.3.12.RELEASE.jar:4.3.12.RELEASE]
    at org.springframework.expression.spel.ast.PropertyOrFieldReference.getValueInternal(PropertyOrFieldReference.java:81) ~[spring-expression-4.3.12.RELEASE.jar:4.3.12.RELEASE]
    at org.springframework.expression.spel.ast.CompoundExpression.getValueRef(CompoundExpression.java:51) ~[spring-expression-4.3.12.RELEASE.jar:4.3.12.RELEASE]
    at org.springframework.expression.spel.ast.CompoundExpression.getValueInternal(CompoundExpression.java:87) ~[spring-expression-4.3.12.RELEASE.jar:4.3.12.RELEASE]
    at org.springframework.expression.spel.ast.OpMinus.getValueInternal(OpMinus.java:98) ~[spring-expression-4.3.12.RELEASE.jar:4.3.12.RELEASE]
    at org.springframework.expression.spel.ast.SpelNodeImpl.getValue(SpelNodeImpl.java:121) ~[spring-expression-4.3.12.RELEASE.jar:4.3.12.RELEASE]
    at org.springframework.expression.spel.standard.SpelExpression.getValue(SpelExpression.java:262) ~[spring-expression-4.3.12.RELEASE.jar:4.3.12.RELEASE]
    at org.springframework.context.expression.StandardBeanExpressionResolver.evaluate(StandardBeanExpressionResolver.java:161) ~[spring-context-4.3.12.RELEASE.jar:4.3.12.RELEASE]
    ... 28 common frames omitted

Высказывание не может разрешить объект Google, поскольку имя свойства начинается с "google.XXX".

Как решить эту проблему ??


person Community    schedule 27.11.2017    source источник


Ответы (1)


В @Value("#{google.recaptcha.site-key}") попробуйте использовать $ вместо #.

РЕДАКТИРОВАТЬ: чтобы немного прояснить это.

# сообщает Spring интерпретировать следующую строку как SpEL. Итак, чтобы получить системное свойство с #, вам нужно написать это так:

  • @Value("#{systemProperties['google.recaptcha.site-key']}").

Я думаю, это должно сработать хотя бы

person K. Kowalczyk    schedule 27.11.2017
comment
Спасибо, это сработало :), это сбивало меня с толку между # и $ - person ; 27.11.2017
comment
Для аудитории, если ключ принадлежит application.properties файлу, его можно извлечь через: @Value("#{environment['google.recaptcha.site-key']}"), это тоже работает. systemProperties используется в основном для параметров, передаваемых через команду -Dgoogle.recaptcha.site-key=something - person Manuel Jordan; 28.12.2020
comment
для меня ЕДИНСТВЕННЫЙ способ извлечь свойства приложения через SpEL - использовать карту среды (весенняя загрузка 2.2.1), а не systemProperties. - person Simon Logic; 24.06.2021