使用Maven时,Spring配置文件应该放在哪里?

5

我正在尝试解决我的配置文件问题。

我有一个Spring MVC应用程序,具有以下结构(我的当前结构)

src/main/java/ .......................(Java类)
src/main/resources/ ..................(一些.properties文件)
src/main/webapp/ .....................(Web内容,web.xml)
src/main/webapp/spring/ ..............(其他Spring配置文件,app-confix.xml等)
src/main/webapp/myApp-servlet.xml ....(servlet配置)
src/test/java ........................(Java测试类) src/test/resources ...................(一些测试.properties文件)

(这是相当标准的Maven项目目录结构)

那么,我的问题是:我应该把Spring配置文件放到资源目录中吗?我不确定它们是否可以视为资源文件。大多数Spring项目的配置在WEB-INF/目录中。但是在单元测试时会出现一个问题,因为当我需要加载servlet配置时,maven期望在/test/resources目录中找到配置文件。我知道,我可以将上下文xml文件复制到测试类中,然后一切都会没问题,但我觉得这不太好。

我在网上阅读了很多文章,但我仍然不确定什么是正确的方法。

所以我有三个选择:

1. 保持当前结构不变

2. 将所有Spring配置文件移动到 /main/(java|test)/resources 中。在这里我看到一个问题,所有的配置文件都会在 classes 目录中,我不确定这是否正确。

3. 只将 Servlet 配置文件移动到 /main/(java|test)/resources 中,其他 Spring 配置文件仍然保留在 /WEB-INF/ 目录中。

那么,你推荐什么?当使用 Maven 和 JUnit 时,配置文件放置的最佳实践是什么?

更新: 在选项 2. 和 3. 中修正了目录命名。

更新: 我发现了一篇非常有趣的文章[1],介绍了 Spring 的最佳实践。它看起来很有前途,并确认了 Ralph 的解决方案。我仍然不满意 META-INF 目录存在于 WEB-INF/classes 中,但是...没有完美的东西。

[1] http://gordondickens.com/wordpress/2012/07/03/enterprise-spring-best-practices-part-1-project-config/

1个回答

11

一个常见的模式(例如Spring Roo应用程序中使用)是将配置文件放置在src\main\resources\META-INF\spring\下。

然后,您可以通过相同的表达式classpath:META-INF\spring\application-context.xml在测试和应用程序中加载它们。


在测试资源文件夹中:src\test\resources\... - Ralph
非常抱歉,但我又遇到了一个奇怪的问题。我按照您的建议进行操作,但我的META-INF目录被复制到了WEB-INF/classes目录中。因此,在我的情况下,我在 webApp/WEB-INF/classes/META-INF/spring... 中拥有所有配置文件。我不确定这是否是正确的行为,我认为所有位于 java/main/resources/META-INF 中的文件都应该位于 webApp/META-INF 目录而不是 webApp/WEB-INF/classes 目录中。 - Peter
完全没问题,你的Web应用程序/META-INF仅包含MANIFEST.MF文件和Maven信息。 - abalogh
这是预期的行为。 Maven资源文件夹将被“合并”到classes文件夹中。 因此,可以通过类路径访问它。 - Ralph
谢谢你的回答,非常好。我昨天以来一直在处理Spring XML的问题,但这绝对是正确的方法,可以从单元测试和Web应用程序中引用配置文件。 - John Lockwood
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接