在 spring 引导中从 application.properties 获取属性
get properties from application.properties in spring boot
我想在 spring 引导 Web 项目中使用来自 application.properties 的 @Value 注释获取值。我以为我可以只使用 @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 returns出错
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" 开头。
我该如何解决这个问题??
在 @Value("#{google.recaptcha.site-key}")
中尝试使用 $
而不是 #
。
编辑:稍微澄清一下。
#
告诉 spring 将后面的字符串解释为 SpEL。
所以为了得到系统 属性 和 #
你必须这样写:
@Value("#{systemProperties['google.recaptcha.site-key']}")
.
我认为它至少应该有效
我想在 spring 引导 Web 项目中使用来自 application.properties 的 @Value 注释获取值。我以为我可以只使用 @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 returns出错
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" 开头。
我该如何解决这个问题??
在 @Value("#{google.recaptcha.site-key}")
中尝试使用 $
而不是 #
。
编辑:稍微澄清一下。
#
告诉 spring 将后面的字符串解释为 SpEL。
所以为了得到系统 属性 和 #
你必须这样写:
@Value("#{systemProperties['google.recaptcha.site-key']}")
.
我认为它至少应该有效