当我在spring framework中读取带有注释的属性文件时,我遇到了问题。我尝试使用xml的相同程序,它的工作正常,但问题是我检查文件在类路径中可用,它给出了false.the代码如下。我的例外是
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'appConfigMongoDB': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: public java.lang.String gettingValueFromResourcePropFile.AppConfigMongoDB.name; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'jdbc.driverClassName' in string value "${jdbc.driverClassName}"
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:334)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1202)
代码是:
package gettingValueFromResourcePropFile;
@Configuration
@ComponentScan
@PropertySource("classpath:db.properties")
public class SpringConfiguration {
public SpringConfiguration(){
super();
}
@Bean
public static PreferencesPlaceholderConfigurer propertyConfigInDev() {
return new PreferencesPlaceholderConfigurer();
}
}
@Configuration
@PropertySource("classpath:db.properties")
public class AppConfigMongoDB {
@Value(value="${jdbc.driverClassName}")
public String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public class MainContainer {
public static void main(String[] args)
{
URL url = ClassLoader.getSystemResource("db.properties");
final File file = new File(url.getFile());
System.out.println(file.exists());
System.out.println(file.getAbsolutePath());
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(SpringConfiguration.class);
AppConfigMongoDB mongo = applicationContext.getBean(AppConfigMongoDB.class);
System.out.println("== ==" + mongo.getName() );
}
}
我的属性文件在src中可用,问题是我无法读取属性文件(prop文件包含以下属性)
db.properties文件
jdbc.driverClassName=org.hsqldb.jdbcDriver
jdbc.url=jdbc:hsqldb:hsql://production:9002
jdbc.username=sa
jdbc.password=root
答案 0 :(得分:0)
我的属性文件在src中可用
我认为您需要将db.properties
文件放在<project_home>/src/main/resources
下,这是大多数Java构建工具的classpath
资源。
答案 1 :(得分:0)
定义单个属性文件
@Configuration
@PropertySource("classpath:default.properties")
public class RestAPIURLConfig { … }
或
@Configuration
@PropertySource(value="classpath:default.properties")
public class RestAPIURLConfig { … }
或
@Configuration
@PropertySource(value={"file://D:/SpringExamples/default.properties"})
public class RestAPIURLConfig {}
当我们使用“classpath”定义属性文件时,如上例所示,它会在项目类路径中搜索该文件并解析所有值。
定义多个属性文件
@Configuration
@PropertySource(value={"classpath:default.properties","classpath:config.properties"})
public class RestAPIURLConfig {}
注:
当我们使用@PropertySource
注释定义多个属性文件时,这些文件的顺序非常重要。例如,以上面的例子为例。如果我们在default.properties和config.properties文件中定义相同的属性(键值)对,则config.properties会覆盖default.properties值。
this tutorial中描述了一步一步的完整示例。