我想从我的自定义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" />
答案 0 :(得分:1)
ContextLoader(Listener)是初始化Spring上下文的实例。这必须是你的(Spring)应用程序生命周期中发生的第一件事。在初始化上下文之前,您的属性不可能被加载。在你建房子之前你不能装饰起居室:)
但是,关于属性的名称,您可能需要将数据库凭据注入到bean中。这个问题可以通过另一种方法解决,我认为这种方法更加清晰,特别是对于在多种环境中运行的应用程序。
您应该在那里配置针对每个环境(本地,开发,集成,生产......)更改的属性,而不是将凭证保留/放入类路径中。例如,如果运行Tomcat,则将属性文件放入包含数据库凭据的conf
目录中。您可以在自定义ContextLoaderListener
中访问该文件,并通过具有静态属性映射的类为您的bean提供属性。
答案 1 :(得分:0)
尝试添加自定义上下文初始值设定项以加载属性文件,如下所示: