gpt4 book ai didi

java - 在spring框架中读取带注解的属性文件

转载 作者:行者123 更新时间:2023-12-05 07:43:45 25 4
gpt4 key购买 nike

我在 spring 框架中读取带有注释的属性文件时遇到问题。我尝试使用 xml 运行相同的程序,但问题在于我正在检查文件是否在类路径中可用,它给出 false。代码如下。我的异常(exception)是

 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

最佳答案

定义单个属性文件

@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 {}

如上例所示,当我们使用“类路径”定义属性文件时,它会在项目类路径中搜索该文件并解析所有值。

定义多个属性文件

@Configuration
@PropertySource(value={"classpath:default.properties","classpath:config.properties"})
public class RestAPIURLConfig {}

注意:

当我们使用@PropertySource 注释定义多个属性文件时,这些文件的顺序非常重要。举个例子。如果我们在 default.properties 和 config.properties 文件中定义相同的属性(键值)对,则 config.properties 会覆盖 default.properties 值。

所以项目结构如下所示:

enter image description here

资源链接:

this tutorial 中描述了一步一步的完整示例。 .

关于java - 在spring框架中读取带注解的属性文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43434044/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com