无法读取WildFly系统属性

时间:2016-01-13 13:17:47

标签: java jboss wildfly wildfly-9

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

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

${main:key}

这就是错误:

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

发生错误,因为以下内容返回null:

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

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

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

我的问题 - 为什么EAR无法读取任何系统属性?

1 个答案:

答案 0 :(得分:1)

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

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

  

系统属性等在安全上下文中解析   应用程序服务器本身,而不是包含该文件的部署。

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

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

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