【问题标题】:Spring configuration loading orderSpring配置加载顺序
【发布时间】:2013-07-17 10:40:15
【问题描述】:

有一个 maven-project 可以生成 .ear 文件,其中包含 .war.jar 的文件。所有这些模块都使用带有ContextLoaderListener的Spring配置文件。

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath*:context.xml</param-value>
</context-param>

实际问题是我们的.war-module 有SpringBeans,它依赖于位于.jar-modules 中的其他一些SpringBeans。在应用程序启动期间,由于查找 context.xml 的顺序错误,无法初始化 Spring 上下文。

问题是,是否有可能以某种方式在 web.xml 中设置加载 spring 上下文的正确顺序?

提前致谢。

【问题讨论】:

    标签: java spring deployment war ear


    【解决方案1】:

    您可以更改 WAR 和 JAR 的配置文件名称 - my-war-beans.xml 和 my-jar-beans.xml。然后定义 ContextLoaderListener 以便它使用 my-war-beans.xml (想法是只提供一个文件作为配置入口点):

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath*:my-war-beans.xml</param-value>
    </context-param>
    

    然后只需从 my-war-beans.xml 中的 my-jar-beans.xml 导入 bean:

    <beans> 
    
        <!-- Include beans from JAR -->
        <import resource="classpath*:my-jar-beans.xml"/>
    
        <!-- List beans from WAR -->
        <bean id="myBean" class="myclass" />
    
    </beans>
    

    确保您的 bean 定义文件具有唯一的名称。类路径是平坦的,所以如果名称相同 - 这种方法很容易受到 jar hell 问题的影响。请注意,您可能需要将诸如“classpath*:my-jar-beans.xml”之类的 URL 更改为其他内容,具体取决于您在 JAR/WAR 中存储文件的位置。

    【讨论】:

    • yeees,这很容易,不知道为什么我以前没有考虑过......非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-03
    • 2015-02-24
    • 2022-10-07
    • 1970-01-01
    相关资源
    最近更新 更多