我应该在哪里将Spring applicationContext.xml保存在EAR中

时间:2011-08-29 10:38:46

标签: spring packaging ear

我有没有WAR或Web应用程序部署在EAR中的服务类。我应该在什么文件夹结构中理想地存储applicationContext.xml?

目前我们将其加载为

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

2 个答案:

答案 0 :(得分:3)

这是一个好地方。这并不重要,我不知道有任何约定。

答案 1 :(得分:0)

如果在Web应用程序中使用Spring,则不应手动加载ClasspathXmlApplicationContext。您的上下文将是一个Web应用程序上下文,而不是类路径应用程序上下文,如果您将以下内容放在web.xml中,它将自动加载:

代码:

<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>

假设您的主要Spring配置文件名为spring-config.xml,并且位于WEB-INF文件夹中。

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

另外,您的耳包策略是错误的;你的Spring配置是特定于webapp的,所以你应该把你的Spring配置文件放在WAR中,在web应用程序的根目录下(最好的地方是WEB-INF下的某个地方,以及web.xml和其他描述符)。如果你有像ejb和webapp一样使用的类的资源,你应该将这些类打包在jar中,把这个jar放在你耳朵里的lib目录下,并在webapp&amp;的MANIFEST.MF中为jar添加一个Class-Path条目;每个ejb罐子。如果您的配置文件具有依赖于环境的属性(例如jdbc配置和磁盘路径),则不应将它们打包到您的耳朵中,而应让应用程序从文件系统外部读取它(PropertyPlaceholderConfigurer是您的最佳镜头)。

对于初学者,我建议您在开始使用ant构建项目之前使用Eclipse ear创建功能来查看Web应用程序的打包方式。

我还建议您将Maven视为您的编译 - 构建 - 包策略,因为这将自动化和标准化项目,并且Web应用程序maven原型将允许您在瞬间为j2ee Web应用程序创建正确的模式。