Spring - 如何在调用上下文加载器之前加载属性

时间:2016-08-02 21:56:31

标签: java spring-mvc

我想从我的自定义contextLoadListener中的属性文件中读取属性。但是,我的侦听器类在spring加载属性文件之前执行。如何在执行CustomContextLoaderListener类之前加载'rdbaccess.properties'?以下是我配置的相关部分。

在web.xml中

<servlet>  
    <servlet-name>spring</servlet-name>  
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

    <init-param>
        <param-name>contextConfigLocation</param-name>

        <param-value>/WEB-INF/spring-servlet.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>  
</servlet>  

<servlet-mapping>  
    <servlet-name>spring</servlet-name>  
    <url-pattern>/</url-pattern>  
</servlet-mapping>  
<listener>

    <listener-class>
        com.my.package.setup.CustomContextLoaderListener
    </listener-class>

</listener>

在spring-servlet.xml中

<context:component-scan base-package="com.my.package" />
<context:property-placeholder location="classpath:rdbaccess.properties" />

2 个答案:

答案 0 :(得分:1)

ContextLoader(Listener)是初始化Spring上下文的实例。这必须是你的(Spring)应用程序生命周期中发生的第一件事。在初始化上下文之前,您的属性不可能被加载。在你建房子之前你不能装饰起居室:)

但是,关于属性的名称,您可能需要将数据库凭据注入到bean中。这个问题可以通过另一种方法解决,我认为这种方法更加清晰,特别是对于在多种环境中运行的应用程序。

您应该在那里配置针对每个环境(本地,开发,集成,生产......)更改的属性,而不是将凭证保留/放入类路径中。例如,如果运行Tomcat,则将属性文件放入包含数据库凭据的conf目录中。您可以在自定义ContextLoaderListener中访问该文件,并通过具有静态属性映射的类为您的bean提供属性。

答案 1 :(得分:0)

尝试添加自定义上下文初始值设定项以加载属性文件,如下所示:

https://gist.github.com/rponte/3989915