jboss - 在 Wildfly-CLI 脚本中为 if/else 逻辑使用属性
问题描述
在 Wildfly CLI 脚本中,可以测试资源是否存在并执行一些条件逻辑:
if (outcome != success) of /subsystem=datasources/xa-data-source=MY_DATASOURCE:read-resource
// now do something
运行 cli 时,您可以提供脚本中可用的属性,如下所示:
$JBOSS_HOME/bin/jboss-cli.sh --file=my.cli --properties=my.properties
我想介绍一些基于这些属性的条件逻辑来做一些条件配置。
一个例子是配置邮件服务器,有时邮件服务器需要用户名和密码,而在其他情况下它允许匿名访问。在设置邮件服务器配置时,我希望能够拥有这样的条件逻辑
if MAILSERVER_USERNAME is defined //confiure mailserver with username password else // configure mailserver without attributes username/password
我可以看到的唯一可能是如果我已经向我的standalone-full.xml 添加了系统属性设置,我可以像这样查询它:
if (outcome != success) of /system-property=foo:read-resource
// now do something
我想根据从 my.properties 传入的属性做一些类似的事情。
这可能吗?
谢谢,
丹尼尔
解决方案
您传递的属性--properties
不能在所有上下文中使用,这使得测试它们的存在很麻烦:
[standalone@localhost] :resolve-expression(expression=$myProperty)
Unrecognized variable myProperty
[standalone@localhost] :resolve-expression(expression=${myProperty})
{
"outcome" => "failed",
"failure-description" => "WFLYCTL0211: Cannot resolve expression '${myProperty}'",
"rolled-back" => true
}
set
但是,您可以通过使用cli 脚本中的命令来解决该问题:
[standalone@localhost] set myProperty=${myProperty}
[standalone@localhost] :resolve-expression(expression=$myProperty)
{
"outcome" => "success",
"result" => "myValue"
}
然后,您可以使用resolve-expression
命令的结果来测试您的财产是否存在:
[standalone@localhost] if (outcome == success) of :resolve-expression(expression=$myProperty)
[standalone@localhost] echo success ! myProperty is set ( $myProperty )
[standalone@localhost] end-if
success ! myProperty is set ( myValue )
如果您的属性未定义,尝试使用它来解决它resolve-expression
会引发错误:
[standalone@localhost] set myProperty=${notMyProperty}
[standalone@localhost] :resolve-expression(expression=$myProperty)
{
"outcome" => "failed",
"failure-description" => "WFLYCTL0211: Cannot resolve expression '${notMyProperty}'",
"rolled-back" => true
}
推荐阅读
- c++ - 来自 file.txt C++ 的格式化输入
- reactjs - 模块构建失败 babel-loader 意外令牌“<”
- javascript - ReactJS - 使用媒体查询的响应式布局
- c# - PredicateBuilder 不适用于 EF Core
- swift - 在条件编译代码(Swift + Xcode 11)中禁用“显示实时问题”?
- javascript - 材质 UI 切换按钮状态
- python - 从给定列中提取数据
- python - 使用 Groupby 将数据框列放入列表列表
- java - 在for循环中一次替换字符串中的所有字符
- python - 使用 pyspark 将 TF-IDF 特征提取为多列