Spring配置文件放在哪里?


18

我想将Spring框架集成到我的项目中,尤其是集成到服务器端。

因此,我不想将其放在war文件的WEB-INF文件夹中。

我是否应该将applicationContext.xml放入每个层中(意味着每个项目都被划分为不同的项目?(服务,域和DAO))

有什么好的做法?


Answers:


25

Maven的文件结构可能与此帮助

本质上,Spring配置文件(可以使用任何名称,而不仅仅是通用名称applicationContext.xml)被视为类路径资源,并位于下src/main/resources。在构建过程中,这些文件然后被复制到WEB-INF/classes目录中,这是这些文件结束的通常位置。

变体包括一个附加spring目录(例如src/main/resources/spring),用于将Spring上下文与专用于应用程序框架的其他资源分开。您可能希望将应用程序上下文划分为专用层,例如:

example-servlet.xml
example-data.xml
example-security.xml

等等。

像开发/测试/生产这样的不同环境呢?

通常,您的Spring配置应该从其环境中获取环境配置。通常,这意味着使用JNDI,JDBC,环境变量或外部属性文件来提供必要的配置。我按优先顺序列出了这些文件,因为JNDI通常比受控生产集群中的外部属性文件更易于管理。

对于集成测试,您可能需要使用“仅测试” Spring配置文件。这将包含使用测试bean或配置的特殊上下文。这些将出现在src / test / resources下,并且可能带有test-前缀以确保开发人员了解其用途。典型的用途是提供一个非JNDI数据源,它可能在构建自动化测试期间针对HSQLDB数据库,并将在测试用例中引用。

但是,通常,大多数Spring上下文文件在层之间移动时,不需要进行专门的修改。应该是在dev / test / production中使用相同的构建工件(例如WAR文件)而只是具有不同的凭据的情况。


2

您的项目是否拆分为Maven模块?如果是这样,您可以为配置文件添加一个额外的模块。让我们称之为配置模块

config-module
      |
      |--> src\main\resources\config\spring\applicationContex.xml
      |--> src\main\resources\config\properties\application.properties
      |--> pom.xml

这种配置是一个建议。设置您自己的文件集, 使其像JAR一样打包,然后将此模块添加为任何其他模块(Web,Ear's lib,另一个jar)的依赖项。

您将有权访问配置模块资源(xml,属性等),因为它们位于类路径中。

Web模块的pom

<dependency>
    <groupId>com.myproject.group</groupId>
    <artifactId>config-module</artifactId>
</dependency>

然后使用来自外部Spring上下文文件的import语句。例如

<import resource="classpath*:com/package/subpackage/**/config/applicationContext.xml" />

这是个好主意!我随意添加一些额外的内容,因为您的示例“导入资源”对我不起作用……我仍在学习导入语句的“过滤”(基于完整的包名称)...而且,我(为了将来的读者)没有打to打扰这个好主意和答案。谢谢莱夫!
granadaCoder

您的“我认为应该工作的”导入可能失败的原因之一是由于此错误:github.com/spring-projects/spring-framework/issues/16017
granadaCoder
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.