在 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/