我应该将Spring applicationContext.xml放在何处

我应该将Spring applicationContext.xml放在何处,spring,packaging,ear,Spring,Packaging,Ear,我的服务类部署在EAR中,没有WAR或Web应用程序。理想情况下,我应该将applicationContext.xml存储在哪个文件夹结构中 目前我们将其加载为 Resource res = new ClassPathResource("META-INF/applicationContext.xml"); 那是个很好的地方。这并不重要,我也不知道这方面有什么约定。如果您在web应用程序中使用Spring,就不应该手动加载ClasspathXmlApplicationContext。您的上下文将

我的服务类部署在EAR中,没有WAR或Web应用程序。理想情况下,我应该将applicationContext.xml存储在哪个文件夹结构中

目前我们将其加载为

Resource res = new ClassPathResource("META-INF/applicationContext.xml");

那是个很好的地方。这并不重要,我也不知道这方面有什么约定。

如果您在web应用程序中使用Spring,就不应该手动加载ClasspathXmlApplicationContext。您的上下文将是web应用程序上下文,而不是类路径应用程序上下文,并且如果您将以下内容放入web.xml中,将自动加载:

代码:


org.springframework.web.context.ContextLoaderListener
上下文配置位置
/WEB-INF/spring-config.xml
假设您的主Spring配置文件名为Spring-config.xml,位于WEB-INF文件夹中

对于web应用程序来说,以编程方式加载类路径上下文总是错误的,您应该有一个由listener加载的上下文和(可选)一个由DispatcherServlet加载的上下文(如果您使用SpringWebMVC作为mvc框架)。我建议您从阅读一些文档开始,并尝试Petclinic示例,以了解如何在web应用程序中正确使用Spring

此外,你的耳朵包装策略是错误的;您的Spring配置是特定于webapp的,因此您应该将Spring配置文件放在WAR中,放在web app的根目录下(最好的位置可能是web-INF下的某个位置,以及web.xml和其他描述符)。如果您有像ejb和webapp都使用的类这样的资源,那么应该将这些类打包到一个jar中,将这个jar放在ear的lib目录下,并在webapp的MANIFEST.MF中为jar添加一个类路径条目&每个ejb jar。如果您的配置文件具有依赖于环境的属性(如jdbc配置和磁盘路径),则不应该将它们打包到ear中,而是让应用程序从文件系统外部读取(PropertyPlaceHolderConfiger是您的最佳选择)

对于初学者,我建议您在开始使用ant构建项目之前,使用EclipseEAR创建功能查看web应用程序应该如何打包


我也建议您考虑Maven作为编译编译包策略,因为这将自动化和标准化项目,而Web应用程序Maven原型会让您在眨眼中为J2EE Web应用程序创建正确的模式。我们从web.xml将其加载为contextConfigLocation/web-INF/applicationContext.xml EAR中是否有等效位置?@shinynewbike:没有,EAR没有等效的标准位置。

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/spring-config.xml</param-value>
</context-param>