在Spring MVC anotation驱动的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=
但是当我在我的码头服务器的webapps目录中部署我的战争时,我收到了这个错误:
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注释来配置此属性?
答案 0 :(得分:2)
您需要在上下文中提供PropertySourcesPlaceholderConfigurer
bean。对于Java配置,必须通过static
@Bean
方法提供它,以便Spring提示它是BeanFactoryPostProcessor
并且不需要(应该在之前初始化) @Configuration
bean。
@Bean
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}
如果您未通过上述PropertySourcesPlaceholderConfigurer
方法中的@Bean
设置者直接提供PropertySources
,则必须以其他方式提供来源。例如,使用@PropertySource
@EnableWebMvc
@Configuration
@ComponentScan("com.mobiusinversion.web")
@PropertySource("classpath:your.properties")
public class Config {