15

在发布这个问题之前,我谷歌从 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

4

5 回答 5

25

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

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

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

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

Spring 参考文档中提供了更多信息。您还应该注册一个关闭挂钩以确保正常关闭:

 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;
}
于 2013-01-28T20:26:57.883 回答
7

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

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

    // more config ...
}

如果你想让你的配置在你的类路径之外,你可以使用file:前缀:

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

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

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

whereAPP_PROPERTIES是一个环境变量,它具有属性文件位置的值,例如/path/to/application.properties.

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

于 2017-04-04T20:43:43.590 回答
4

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

Properties properties = new Properties();
properties.load(Thread.currentThread().getContextClassLoader().getResourceAsStream(fileName));
于 2013-09-13T09:07:54.737 回答
0

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

于 2013-07-22T10:08:43.400 回答
0

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

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

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

用法: ${property-key}

于 2020-02-13T07:42:08.137 回答