如何强制 WebSphere Liberty 按特定顺序启动 WAR

How to force WebSphere Liberty to start WARs in certain order

您知道如何强制 WebSphere Liberty 按给定顺序启动 WAR(单独部署或在单个 EAR 文件中部署)吗?默认情况下,WLP 是并行启动的,没有关于如何调整它的信息。

我知道在完整的 WebSphere Application 服务器中有 was/is 这样的选项可以在 deployment.xml 中定义起始权重,但在 WLP 中它似乎丢失了。

目前,在 Liberty 中没有开箱即用的方法来控制应用程序启动顺序。

一些备选方案可能是:

1) 每个服务器使用 1 个应用程序

将服务器分开,这样每个服务器只有 1 个应用程序,然后使用容器编排层在服务器级别强制进行排序。

2) 使用 dropins + shell 脚本

使用 ${server.config.dir}/dropins/ 文件夹并使用脚本以受控顺序将应用程序移动到该文件夹​​中。例如:

mv firstApp.war /path/to/server/dropins/
# wait some amount of time as a heuristic
sleep 5
mv nextApp.war /path/to/server/dropins/

3) 使用 autoStart=false 并从 ApplicationMBean 启动

如果您在应用程序上设置 <application autoStart="false">,则可以通过 JMX 调用 ApplicationMBean.start() 来控制开始顺序。见 ApplicationMBean doc as well as Working with JMX MBeans on Liberty.


虽然这个请求已经出现过几次,所以我们已经打开 this github issue 来讨论内置解决方案。

从版本 20.0.0.4 开始,这在 Liberty 中是可能的(尽管至少在 20.0.0.6 之前它将处于测试阶段)。

要在 "app2" 之前开始 "app1",您需要在 "app2" 上指定 "startAfter" 属性。

<application id="app1" location="start_me_first.war"/>
<application id="app2" location="start_me_later.war" startAfter="app1"/>

startAfter 属性采用应用程序 ID 列表,因此您可以指定多个必须先启动的应用程序才能启动。