WildFly CLI 针对嵌入式服务器运行脚本

Posted

技术标签:

【中文标题】WildFly CLI 针对嵌入式服务器运行脚本【英文标题】:WildFly CLI run script against embedded server 【发布时间】:2019-08-20 09:46:17 【问题描述】:

我有一些使用jboss-cli -c --controller=... --file=myscript.cli 运行的脚本。 -c--controller 选项很棒,因为我的脚本不知道它应该在哪个服务器上运行并且可以重复用于多个服务器。

我现在想使用offline-cli 功能来避免端口冲突,并防止在设置服务器时通过网络访问服务器。 我现在的问题是,为了启动嵌入式服务器,我必须使用 CLI 命令embed-server,但我不想将该命令添加到我的脚本中,因为脚本不应该知道服务器配置 xml 文件。

很遗憾,我不能同时使用 --command="embed-server --server-config=my-standalone.xml"--file=myscript.cli,因为 CLI 会抱怨:

Only one of '--file', '--commands' or '--command' can appear as the argument at a time.

我尝试的另一件事是:--commands="embed-server --server-config=my-standalone.xml,run-batch --file=\"myscript.cli\" 但这也不起作用,因为我的脚本包含一些 if-else 逻辑,例如:

if (outcome == success) of /subsystem=iiop-openjdk:read-resource()
  /subsystem=iiop-openjdk:remove()
end-if

不幸的是,批处理模式不支持条件逻辑(请参阅https://bugzilla.redhat.com/show_bug.cgi?id=1083176)。

【问题讨论】:

【参考方案1】:

如果您使用的是 Unix 系统,您可以尝试以下方法:

(echo embed-server --std-out=echo  --server-config=my-standalone.xml; cat myscript.cli) | jboss-cli.sh 

【讨论】:

这是一个很好的解决方法,不幸的是我同时使用 Linux 和 Windows 系统,但类似的解决方法也可能在 windows 上(尽管我对 windows shell 的了解不够确定),所以我可能会将其用作后备。【参考方案2】:

简单的方法是在脚本中启动嵌入式服务器:

embed-server --std-out=echo  --server-config=standalone-full.xml
/subsystem=messaging-activemq/server=default/jms-queue=inQueue:add(durable=true, entries=["/queue/inQueue","java:jboss/exported/queue/inQueue"])
/subsystem=messaging-activemq/server=default/jms-queue=outQueue:add(durable=true, entries=["/queue/outQueue","java:jboss/exported/queue/outQueue"])
quit

不要忘记在 cli 脚本结束时退出 :)

【讨论】:

我会引用自己的话:我不想将该命令添加到我的脚本中,因为脚本不应该知道服务器配置 xml 文件的名称。

以上是关于WildFly CLI 针对嵌入式服务器运行脚本的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 jboss-cli 在 WildFly 17 中创建 JMS 队列

@vue/cli的脚手架的.env.xxx.local的全局环境变量

只启动一次 jboss-cli

如何通过 CLI 获取 Wildfly 服务器状态?

当我无法访问 CLI 工具时,如何关闭 JBoss Wildfly?

如何使用 Java 代码使用 jboss-cli 命令将 EAR 文件部署到 wildfly-17.0.1 服务器