java - 无法读取 WildFly 系统属性

标签 java jboss wildfly wildfly-9

我有一个打包在 EAR 文件中并部署在 WildFly 9.0.2 Final 上的应用程序。它需要读取 WildFly 定义的一些系统属性。

问题是 EAR 中的类无法读取 WildFly 系统属性。例如 - 以下代码获取 NullPointerException:

String DEPLOY_DIR  = System.getProperty("jboss.server.base.dir") + File.separator + "deployments"
File deployDir = new File(DEPLOY_DIR);

这是错误:

java.lang.NullPointerException
            at java.io.File.<init>(File.java:277)

错误发生是因为以下返回空值:

System.getProperty("jboss.server.base.dir")

请注意,当 WildFly 启动时,其相关系统属性会在其日志中正确显示:

jboss.server.base.dir = C:\javaSoft\workspaces\WildFly_Migration\App\configuration\wildfly-9.0.2.Final\standalone
jboss.server.config.dir = C:\javaSoft\workspaces\WildFly_Migration\App\configuration\wildfly-9.0.2.Final\standalone\configuration
jboss.server.data.dir = C:\javaSoft\workspaces\WildFly_Migration\App\configuration\wildfly-9.0.2.Final\standalone\data
jboss.server.deploy.dir = C:\javaSoft\workspaces\WildFly_Migration\App\configuration\wildfly-9.0.2.Final\standalone\data\content
jboss.server.log.dir = C:\javaSoft\workspaces\WildFly_Migration\App\configuration\wildfly-9.0.2.Final\standalone\log

我的问题 - EAR 无法读取任何系统属性是否有任何原因?

最佳答案

我首先要说的是,在大型系统中,很难诊断出这些问题。

在 JVM 中,系统属性是共享的,您应该始终看到相同的值,正如 Wildfly9 文档在警告您 Property Replacement 的风险时确认的那样

System properties etc are resolved in the security context of the application server itself, not the deployment that contains the file.

所以答案应该是否定的:EAR 可以读取所有系统属性,因为您没有收到 SecurityException(这排除了您在安全上下文中运行并且它正在阻塞的事实你)。

无论如何,您可能需要检查一些情况,例如:

  1. 您的一段代码在删除该值的另一​​段代码之后运行。您可以使用环境变量 $JBOSS_HOME 解决这些问题。
  2. 您的 DEPLOY_DIR 是一个静态常量(在这种情况下,它可以在 Wildfly 设置 jboss.server.base.dir 之前进行评估)。您可以使用由 standalone.sh 直接创建的“jboss.home.dir”键解决这个问题。
  3. 您的代码在静态 { ... } 初始化 block 中运行。如果是这种情况,在其中使用“新文件”是一种不好的做法,但如果不是,您可以按照情况 2 解决。

关于java - 无法读取 WildFly 系统属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34767754/

相关文章:

java - 如何在 Wildfly 中使用自定义系统属性解析器

java - struts2 迭代器捕获特定值

java - 我如何将网站与 Optaplanner(html、javascript、php)集成?

java - 使用 Java 解析 HTML "style"属性

java - 使用 NTLM 和 Wildfly 的 HTTP 响应 '401: Unauthorized'

mysql - 无法通过 jdbc MYSQL 将波兰字符插入到数据库中

jboss - Keycloak 自定义验证输出消息

java - 如何更改Wildfly服务器的IP地址

java - 对齐所有面板组件ja​​va

java - 从 Java 访问时,Scala public 变为 private?