java - @Value注释语法问题

标签 java spring properties annotations

在 Spring MVC 注解驱动的 Web 应用程序中,我将其作为容器配置

@EnableWebMvc
@Configuration
@ComponentScan("com.mobiusinversion.web")
public class Config {

    @Value("${jdbc.driverClassName}")   private String driverClassName;
    @Value("${jdbc.url}")               private String url;
    @Value("${jdbc.username}")          private String username;
    @Value("${jdbc.password}")          private String password;

在我的 application.properties 中,我有

 ################### JDBC Configuration ##########################
 jdbc.driverClassName=org.hsqldb.jdbcDriver
 jdbc.url=jdbc:hsqldb:file:db/myDB;shutdown=true
 jdbc.username=david
 jdbc.password=

但是当我在 jetty 服务器的 webapps 目录中部署 war 时,出现此错误:

Caused by: 
java.lang.ClassNotFoundException: ${jdbc.driverClassName}
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:436)
    at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:389)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:270)

很明显这个属性没有得到处理。如何正确使用@Value注解来配置该属性?

最佳答案

您需要提供PropertySourcesPlaceholderConfigurer bean 在你的上下文中。对于 Java 配置,必须通过 static @Bean 方法提供,以便 Spring 提示它是一个 BeanFactoryPostProcessor 并且不会不需要(应该在之前初始化)@Configuration bean。

@Bean
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
    return new PropertySourcesPlaceholderConfigurer();
}

如果您不提供PropertySources直接通过上面的 @Bean 方法中的 PropertySourcesPlaceholderConfigurer setter ,您必须以另一种方式提供源。例如,使用 @PropertySource

@EnableWebMvc
@Configuration
@ComponentScan("com.mobiusinversion.web")
@PropertySource("classpath:your.properties")
public class Config {

关于java - @Value注释语法问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22868268/

相关文章:

java - 如何在spring boot secuirty中为具有不同请求方法类型的同一url赋予不同的角色权限

Spring:@ConfigurationProperties中的@NestedConfigurationProperty列表

properties - OWL推理: Necessary and sufficient conditions for inferring a property

java - 选择性使用 Spring Security 的 CSRF 过滤器

java - 是否可以使用 Orika Mapper 将字段从两个源对象映射到目标对象?

java - Google Drive SDK - 客户 secret - 它有多 secret ?

java - junit - 测试从未实例化的类的私有(private)方法

java - 由于内部联接而不是左联接,Spring DTO 投影查询不会返回所有结果

java - 属性文件未按正确顺序存储

java - Tomcat7 堆栈大小太小