【问题标题】:How to load spring beans for multiple jar file in a war based application如何在基于战争的应用程序中为多个 jar 文件加载 spring bean
【发布时间】:2015-04-09 02:43:51
【问题描述】:

我有一个基于战争的 Spring Web 应用程序项目,该项目内部有多个 jar 文件。我正在使用 maven setup 来构建 jars 和 war 文件。每个 jar 文件都有一组需要加载的 bean,我无法这样做。

在每个 jar 文件中,我都定义了 beans.xml 文件。但是 bean 不会自动加载。我尝试从以下位置加载 beans.xml 文件: a) src/main/resources b) src/main/resources/META-INF c) src/main/resources/META-INF/spring 它不起作用。

我的问题:如何为此类场景准备应用程序上下文?带有多个 jar 的基于战争的应用程序。

【问题讨论】:

  • 如何开始你的 spring 上下文?弹簧文件是否都具有相同的名称?在你的 service.jar 中,将你的上下文命名为 appContext-service.xml,在你的 web-app 中,在 appContext-web.xml 中命名,将它们都放在同一个位置。在您的上下文加载器中,使用 classpath:appContext-*.xml 指定位置。我认为这应该可行,但没有尝试过。
  • 您是否使用 标签从主应用程序上下文中导入其他 XML?
  • 你可以查看这个问题:stackoverflow.com/questions/600095/…

标签: java spring maven spring-mvc


【解决方案1】:

如果您将应用程序打包为 webapp,那么您只需添加一个名为 yourservletname-servlet.xml 的文件,并使用 <import /> 元素包含 jar 文件中的所有资源。

Spring 会在幕后扫描上述文件by default,包括导入文件中声明的所有bean。

您的 servletname-servlet.xml 应该是这样的(为简洁起见,省略了 xml 命名空间和模式声明):

<beans>
  <import resource="classpath:/META-INF/beans.xml"/>
</beans>

我建议使用 META-INF 作为您的上下文配置文件位置。

这将扫描类路径根目录下 META-INF 文件夹下所有名为 beans.xml 的 bean 声明文件,假设这些文件必须 在您的项目结构中使用 Maven 作为构建工具时位于 src/main/resources/META-INF/ 下(这样它们就可以直接复制到 jar_root_path/META-INF/ 下) )。

否则,如果您不使用默认的 -servlet.xml 文件,则可以使用 contextConfigLocation 指定自定义应用程序上下文描述符,如下所示:

<context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>application-context.xml</param-value>
</context-param>

【讨论】:

    【解决方案2】:

    尝试简单 导入资源="classpath*:/META-INF/beans.xml"/

    每个 jar 包含 META-INF 文件夹下的 beans.xml 文件。它将扫描每个 jar 并加载 beans.xml 文件并根据这些 XMLs 文件创建 beans。

    【讨论】:

      【解决方案3】:

      你提到 beans.xml,这是 CDI 项目还是标准 Spring 项目?

      使用 maven,src/main/resources 下的所有内容都会打包到 JAR 的顶层。因此,如果您在 src/main/resources/META-INF/beans.xml 中有一个文件,那么您应该使用“/META-INF/beans.xml”加载它,或者在 spring 上下文中将其定义为“classpath:/META” -INF/beans.xml”。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-08-28
        • 1970-01-01
        • 1970-01-01
        • 2012-08-30
        • 1970-01-01
        • 2017-12-21
        • 2017-11-12
        • 2017-05-29
        相关资源
        最近更新 更多