不同war的ServletContextListener执行顺序
ServletContextListener execution order for different wars
是否可以控制不同war中ServletContextListener的执行顺序?
假设一个web服务中有3个独立的模块A、B、C。它们可以按任何顺序初始化,并且没有任何后果。但是,如果存在可选模块 D,则需要先对其进行初始化,并且可能会影响其他模块。这个配置可以通过Spring实现吗?唯一想到的是有一个全局 ServletContextListener 轮询每个模块的初始化 class 是否存在于 class 路径上,但该解决方案看起来很混乱。
您可以在 web-fragment.xml 或 web.xml 中定义排序。请参阅下面的 link 以了解更多信息。 https://blogs.oracle.com/swchan/entry/servlet_3_0_web_fragment
当所有 WAR 都捆绑在 EAR 中时,可以管理应用程序的启动。它可以通过在 application.xmkl
.
中添加 <initialize-in-order>true</initialize-in-order>
来完成
如果所有 WAR 都是独立的,那么就没有标准的方法可以做到这一点。但是,有一些特定于容器的功能可以让您做到这一点。
参考文献:
- Tomcat Startup ordering
如果您想定义应用程序的 servlet 之间的依赖关系。
您可以定义 Absolute ordering in web.xml
或 relative ordering in web-fragment.xml
.
以下是绝对排序的工作原理:
<web-app>
...
<absolute-ordering>
<name>A</name>
<others/>
<name>B</name>
<absolute-ordering>
</web-app>
如果web.xml中没有绝对顺序,容器会在web-fragment.xml中寻找相对顺序。它看起来像这样:
<ordering>
<before>
<others />
</before>
</ordering>
是否可以控制不同war中ServletContextListener的执行顺序?
假设一个web服务中有3个独立的模块A、B、C。它们可以按任何顺序初始化,并且没有任何后果。但是,如果存在可选模块 D,则需要先对其进行初始化,并且可能会影响其他模块。这个配置可以通过Spring实现吗?唯一想到的是有一个全局 ServletContextListener 轮询每个模块的初始化 class 是否存在于 class 路径上,但该解决方案看起来很混乱。
您可以在 web-fragment.xml 或 web.xml 中定义排序。请参阅下面的 link 以了解更多信息。 https://blogs.oracle.com/swchan/entry/servlet_3_0_web_fragment
当所有 WAR 都捆绑在 EAR 中时,可以管理应用程序的启动。它可以通过在 application.xmkl
.
<initialize-in-order>true</initialize-in-order>
来完成
如果所有 WAR 都是独立的,那么就没有标准的方法可以做到这一点。但是,有一些特定于容器的功能可以让您做到这一点。
参考文献:
- Tomcat Startup ordering
如果您想定义应用程序的 servlet 之间的依赖关系。
您可以定义 Absolute ordering in web.xml
或 relative ordering in web-fragment.xml
.
以下是绝对排序的工作原理:
<web-app>
...
<absolute-ordering>
<name>A</name>
<others/>
<name>B</name>
<absolute-ordering>
</web-app>
如果web.xml中没有绝对顺序,容器会在web-fragment.xml中寻找相对顺序。它看起来像这样:
<ordering>
<before>
<others />
</before>
</ordering>