Han*_*ier 6 spring spring-el spring-environment spring-boot
我正在尝试使用常量来定义属性,然后使用@Value注释解析它.
我在接口中定义了常量:
public interface InternalConstant{
public static final String JOB_NAME_PROPERTY = "javabatch.jobName";
}
Run Code Online (Sandbox Code Playgroud)
我正在使用springboot,我将该属性作为默认属性添加到上下文中:
SpringApplication springApp = new SpringApplication(configs.toArray());
Properties props = new Properties();
props.setProperty(InternalConstants.JOB_NAME_PROPERTY, "MyStartableJob");
springApp.setDefaultProperties(props);
Run Code Online (Sandbox Code Playgroud)
现在,我想使用@Value将String"MyStartableJob"注入String.但是@Value(value="${javabatch.jobName})我不想直接使用,而是想使用定义的常量.
我试过了
@Value(value="#{T(ch.mobi.javabatch.core.internal.InternalConstants).JOB_NAME_PROPERTY}")
Run Code Online (Sandbox Code Playgroud)
但是,当然,这只解析为"javabatch.jobName"而不是名为"javabatch.jobName"的属性的值.
所以我尝试将其包装@Value(value="${#{T(ch.mobi.javabatch.core.internal.InternalConstants).JOB_NAME_PROPERTY}}"),但这会导致异常.
Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder '#{T(ch.mobi.javabatch.core.internal.InternalConstants).JOB_NAME_PROPERTY}' in string value "${#{T(ch.mobi.javabatch.core.internal.InternalConstants).JOB_NAME_PROPERTY}}"
at org.springframework.util.PropertyPlaceholderHelper.parseStringValue(PropertyPlaceholderHelper.java:174)
at org.springframework.util.PropertyPlaceholderHelper.replacePlaceholders(PropertyPlaceholderHelper.java:126)
at org.springframework.core.env.AbstractPropertyResolver.doResolvePlaceholders(AbstractPropertyResolver.java:204)
at org.springframework.core.env.AbstractPropertyResolver.resolveRequiredPlaceholders(AbstractPropertyResolver.java:178)
at org.springframework.context.support.PropertySourcesPlaceholderConfigurer$2.resolveStringValue(PropertySourcesPlaceholderConfigurer.java:175)
at org.springframework.beans.factory.support.AbstractBeanFactory.resolveEmbeddedValue(AbstractBeanFactory.java:801)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:955)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:942)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:533)
... 16 more
Run Code Online (Sandbox Code Playgroud)
我知道,我可以简单地注入Environment并使用其getProperty方法:
@Autowired
private Environment env;
public void m1() {
env.getProperty(InternalConstants.JOB_NAME_PROPERTY);
}
Run Code Online (Sandbox Code Playgroud)
这适用于我的目的.但我想知道,如果这也可以在@Value中使用SPEL完成.
谢谢.
Pav*_*ral 16
最简单的方法是什么:
@Value("${" + InternalConstant.JOB_NAME_PROPERTY + "}")
private String jobName
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5949 次 |
| 最近记录: |