WildFly run-batch:启动所有具有依赖项的部署

WildFly run-batch:启动所有具有依赖项的部署

我有一台 WildFly 10 服务器,其中安装了大约 12 个部署,部署列表可能会定期更改。主要问题是,当我重新启动服务器时,应用程序会尝试同时部署。但是,大多数应用程序无法启动,直到启动其他部署。事实上,它们有严格的运行顺序。因此,当 Wildfly 服务器重新启动时,部分部署将以错误的方式启动并且无法工作。我想到了一些技巧:

  1. 停止服务器进程 WildFly
  2. 在standalone.xml中,所有部署设置为禁用状态(通过cli命令)
  3. 启动 WildFly 服务器
  4. 运行脚本:
    export JAVA_HOME=/usr/java/jdk1.8.0_131
    export WILDFLY_HOME=/opt/wildfly

    PATH=$WILDFLY_HOME/bin:$PATH

    jcli=$WILDFLY_HOME/bin/jboss-cli.sh

    args="--connect --controller=`hostname`:9990"

    modules=`$jcli $args --command="ls deployment -l" | sed 's/\(.*\)/deploy --name=\1/'`


    if [ -z "${modules// /}" ]
    then
       echo "Nothing to start on this server `hostname`"
       exit 0
    fi

    $jcli $args <<EOF
    batch
    $modules
    run-batch --headers={allow-resource-service-restart=true}
    EOF

同时,当我第一次从 4 个点运行脚本时,我收到错误:ClassNotFoundException 和 NoClassDefFoundError。没有部署启动。但如果我第二次运行此脚本 - 一切都会启动。

其实问题是,第二次一切是如何开始的?有没有办法让它更简单,没有错误,也许 CLI 中有一个操作可以“正确”地完成所有这些操作(生成启动序列或类似的东西)?

答案1

事实证明,这种方法每次都有效。

也就是说,在50%的情况下,即使从第二次开始,所有的应用程序都不会以这样的脚本启动。

我不得不求助于一个变量的形成,该变量描述了启动应用程序的顺序。此顺序包括所有可能的应用程序,因此如果其中一些是预先安装的,那么这不是问题。脚本通过以下命令检查应用程序:

ls deployment -l

接下来,它使用序列列表检查输出,并依次启动 WildFly 上可用的应用程序。

相关内容