2011-11-17 14 views
4

目前,默认的,我认为,其复制到Maven的距离的src/main /资源的applicationContext.xml复制到目标/ myproject的/ WEB-INF

target/myproject/WEB-INF/classes 

所以在部署时不会拿起上下文。

而且,我想引用服务器特定的配置文件database.properties,我希望把它放在tomcat的/ conf目录,然后在applicationContext.xml中引用它,我该怎么办呢?

另外(2),我的印象是这是一个相当标准和体面的方式来设置 - 请纠正我,如果我错了。

编辑 服务器的具体配置文件我使用的此

<context:property-placeholder 
     location="file:${catalina.home}/conf/database.properties" 
     ignore-unresolvable="true" 
/> 

回答

2

对于您的标题问题:通常在一个.war Maven的模块,你就会把网页相关的资源下的src/main/webapp的而不是src/main/resources。然后,maven插件会自动选取它们,因为它符合约定。因此,移动你的applicationContext.xml为src /主/ web应用/ WEB-INF

另一种选择是在documentation

描述对于第二个问题,你可以看一个PropertyPlaceHolderConfigurer配置webResources。你只需要得到正确的路径。

+0

我认为这个约定是把它放在src/main/resources中,并且为了测试我可以在src/test/resources中放入一个不同的文件 – NimChimpsky

+0

这是jar模块的惯例,即使这样它们也放在类中,确定jar文件的内容。对于web应用程序资源来说,这些资源最终应该在webapp结构中,而不是放在src/main/webapp中的类中,并且它们被拉到与.war文件根目录匹配的目录结构中。因此,src/main/webapp/WEB-INF/spring/config/context.xml将在.war文件中的WEB-INF/spring/config/context.xml中结束。 – digitaljoel

+0

另一种选择是配置webResources。我已经通过该文档的链接更新了我的答案。 – digitaljoel

6

如果你需要保持applicationContext.xml作为类路径的资源,您可以通过添加以下行配置ContextLoaderListener从classpath中挑它web.xml

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>classpath:applicationContext.xml</param-value> 
</context-param> 

这比配置Maven把它复制到要容易得多WEB-INF

关于第二个问题,您可以配置PropertyPlaceholderConfigurer<context:property-placeholder>从文件系统加载.properties文件。

相关问题