我有一个spring MVC Web应用程序,它具有以下结构:
myapp
|-META-INF
|-WEB-INF
|-classes
| |-conf
|-application.properties
|-lib
| |-externalApp.jar
| |-conf
| |-applicationContext.xml
|
|-applicationContext.xml
|-myapp-servlet.xml
在myapp/WEB-INF/applicationContext
中,我导入了jar文件中的applicationContext.xml
文件,如下所示:
<import resource="classpath:WEB-INF/conf/applicationContext.xml" />
导入资源中的bean工作正常,我可以在我的Web应用程序的控制器/服务类中看到它们。
我遇到的问题是
jar文件中的上下文文件(即WEB-INF/lib/externalApp.jar/applicationContext.xml
)具有用于加载属性文件的配置。必须由Web应用程序设置属性,以便属性文件位于webapp中。 jar文件的上下文文件中的配置如下所示:
我希望上面的属性加载Web应用程序中的属性文件,所以我将其值设置为如下所示:
<bean class="com.myapp.ExternalAppPropertyPlaceholderConfigurer">
<property name="location" value="classpath:conf/application.properties" />
<property name="ignoreUnresolvablePlaceholders" value="true" />
</bean>
使用上面的设置,jar文件中期望这些属性可用的类仍然无法访问属性。
我猜的问题是如何让WEB-INF/classes/conf/application.properties
中的属性文件可以被位于WEB-INF/lib/externalApp.jar
的jar文件中的对象访问。
查看我得到的堆栈跟踪,看起来导入的上下文文件中引用的对象在加载属性之前首先加载,这不是我想要的。
感谢。
答案 0 :(得分:1)
您可以像这样使用classpath*:前缀
<bean class="com.myapp.ExternalAppPropertyPlaceholderConfigurer">
<property name="location" value="classpath*:conf/application.properties" />
<property name="ignoreUnresolvablePlaceholders" value="true" />
</bean>
修改强>
由于您的conf/application.properties
位于您的网络应用程序中,您必须在您的网络应用程序applicationContext中定义它(不像现在那样在jar中)。并在导入jar的applicationContext之前定义它。即在你的web-app applicationContext中输入这样的东西:
<bean class="com.myapp.ExternalAppPropertyPlaceholderConfigurer">
<property name="location" value="classpath:conf/application.properties" />
<property name="ignoreUnresolvablePlaceholders" value="true" />
</bean>
<import resource="classpath*:/conf/applicationContext.xml" />
并从jar applicationContext中删除属性声明。