如何在spring项目中读取属性文件?

时间:2013-01-28 20:19:08

标签: java spring properties spring-annotations

在发布此问题之前,我谷歌从Spring项目获取属性(它不是基于Web的项目)。我很困惑,因为每个人都在谈论application-context.xml并且配置类似

但是,我正在使用Spring正常的Java项目(没有Web应用程序和类似的东西)。但我想从属性文件中获取一些常见属性,并且需要在JAVA文件中使用。如何通过使用Spring / Spring Annotations来实现这一目标?

我应该在我的项目下配置myprops.properties文件以及如何通过spring调用?

我的理解是application-context.xml仅用于基于Web的项目。如果没有,我应该如何配置这个application-context.xml,因为我没有web.xml来定义application-context.xml

5 个答案:

答案 0 :(得分:24)

您可以创建基于XML的应用程序上下文,如:

ApplicationContext ctx = new ClassPathXmlApplicationContext("conf/appContext.xml");

如果xml文件位于类路径上。或者,您可以使用文件系统上的文件:

ApplicationContext ctx = new FileSystemXmlApplicationContext("conf/appContext.xml");

Spring reference docs提供了更多信息。您还应注册shutdown hook以确保正常关闭:

 ctx.registerShutdownHook();

接下来,您可以使用PropertyPlaceHolderConfigurer从' .properties'中提取属性。文件并将它们注入你的bean:

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations" value="classpath:com/foo/jdbc.properties"/>
</bean>

<bean id="dataSource" destroy-method="close" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName" value="${jdbc.driverClassName}"/>
    <property name="url" value="${jdbc.url}"/>
    <property name="username" value="${jdbc.username}"/>
    <property name="password" value="${jdbc.password}"/>
</bean>

最后,如果您更喜欢基于注释的配置,则可以使用@Value注释将属性注入到bean中:

@Component
public class SomeBean {

    @Value("${jdbc.url}") 
    private String jdbcUrl;
}

答案 1 :(得分:6)

从Spring 4开始,您可以在Spring @Configuration类中使用@PropertySource注释:

@Configuration
@PropertySource("application.properties")
public class ApplicationConfig {

    // more config ...
}

如果您希望将配置置于类路径之外,可以使用file:前缀:

@PropertySource("file:/path/to/application.properties")

或者,您可以使用环境变量来定义文件

@PropertySource("file:${APP_PROPERTIES}")

其中APP_PROPERTIES是具有属性文件位置值的环境变量,例如/path/to/application.properties

请阅读我的博文Spring @PropertySource,了解有关@PropertySource,其用法,如何覆盖属性值以及如何指定可选属性来源的更多信息。

答案 2 :(得分:3)

您不必使用Spring。 你可以用这样的普通java阅读:

Properties properties = new Properties();
properties.load(Thread.currentThread().getContextClassLoader().getResourceAsStream(fileName));

答案 3 :(得分:0)

您能想出如何在整个应用中使用您的项目吗?如果您的项目用作Web应用程序的构建路径,并且项目中的配置是通过spring注释实现的,那么毫无疑问您会对如何添加application.xml文件感到困惑。我的建议是你必须宣布将使用你的项目的人,告诉他们你需要什么,你只需要在你的代码中添加@Value("${valuename}")

答案 4 :(得分:0)

src/main/resources/ 目录中创建新的属性文件,文件扩展名必须为 .properties ,例如 db.properties

在您的spring xml配置文件中写入以下上下文属性:

<context:property-placeholder location="db.properties"/>

用法 ${property-key}