使用 jboss-cli 引用它时无法解析系统属性

Posted

技术标签:

【中文标题】使用 jboss-cli 引用它时无法解析系统属性【英文标题】:Cannot resolve system property when using referencing it using jboss-cli 【发布时间】:2019-09-14 05:17:03 【问题描述】:

我正在尝试使用 jboss-cli 刷新 JNDI 数据源,但数据源是使用 $jndi.prefix 变量定义的,并且 CLI 似乎无法解决它。

这是我在standalone.xml 中的数据源:

<datasource jndi-name="$jndi.prefix/CORE" pool-name="$jndi.prefix/CORE_Pool" enabled="true" use-java-context="true" use-ccm="true">
    <connection-url>jdbc:sqlserver://10.222.255.100;DatabaseName=CORE</connection-url>
    <driver>sqlserver</driver>
    <pool>
        <min-pool-size>1</min-pool-size>
        <max-pool-size>10</max-pool-size>
        <prefill>true</prefill>
    </pool>
    <security>
        <user-name>CORE_DBO</user-name>
        <password>password</password>
    </security>
</datasource>

jndi.prefixsystem-properties中定义:

<system-properties>
    <property name="jndi.prefix" value="java:"/>
</system-properties>

我可以使用 CLI 看到它,但是在尝试解决它时,我被告知它无法识别:

[standalone@localhost:9990 /] cd system-property
[standalone@localhost:9990 system-property] cd jndi.prefix
[standalone@localhost:9990 system-property=jndi.prefix] ls
value=java:
[standalone@localhost:9990 system-property=jndi.prefix] /subsystem=datasources/data-source=$jndi.prefix\/CORE_Pool/:read-resource
Unrecognized system property jndi.prefix

我尝试将数据源中的 $jndi.prefix 与文字值 java: 进行交换,这很有效,但是我们有大量的环境需要更新,所以我不喜欢那个解决方案。

为什么明确定义了这个变量,CLI 不能解析它?

【问题讨论】:

【参考方案1】:

您可以在 CLI 中使用的系统属性不是您的 Wildfly 配置中定义的:

管理 CLI 命令中使用的系统属性值必须已经定义才能被解析。启动管理 CLI 实例时,您必须传入属性文件 (--properties=/path/to/file.properties) 或属性值对 (-Dkey=value)。属性文件使用标准的 KEY=VALUE 语法。

(source 用于 EAP,但很可能与 Wildfly 相同)

【讨论】:

不是我希望的答案,但它是有道理的。感谢您的帮助。

以上是关于使用 jboss-cli 引用它时无法解析系统属性的主要内容,如果未能解决你的问题,请参考以下文章

路径属性的 jboss-cli 属性格式

JBoss Wildfly 在 jboss-cli 命令行模式下显示属性值

jboss-cli.sh 无法在 centos 7 上运行

当我尝试使用 Spring Boot 为 SessionFactory 创建 bean 时无法解析的循环引用

无法解析数据表 SCRIPT5007:无法设置未定义或空引用的属性“_DT_CellIndex”

Keycloak/Undertow/JBoss-CLI - 从环境变量中设置“web-context”