【问题标题】:can we use unix variables in our property file in java我们可以在 java 的属性文件中使用 unix 变量吗
【发布时间】:2025-12-03 22:40:01
【问题描述】:

在 java 应用程序中,我有我的属性文件,其中包含键/对值,例如

usa.national.bank=美国银行

等等

现在假设我将我的应用程序部署在一个 unix 盒子中,在那里我已经声明了如下变量: export US_NAT_BANK=美国银行

所以我的应用程序应该在这个 unix 盒子中运行,并且在运行时的某个时间点,它会读取这个值。

所以尝试像这样声明我的属性文件: usa.national.bank=$US_NAT_BANK

但它无法读取变量中定义的值,即“美国银行”,而是读取文字值,即“$US_NAT_BANK”

我做错了什么还是不能在属性文件中使用 unix 变量?

【问题讨论】:

  • 不是本地的; Java 不是外壳。但是您当然可以直接使用System.getenv("US_NAT_BANK"),或者编写自己的逻辑来搜索其中包含$ 的子字符串并自己进行。
  • 谢谢艾略特。所以这些其他解决方案显然必须用java本身编写,总体而言,属性文件不能直接引用变量。我说的对吗?
  • 没有“Unix 变量”这样的东西;您似乎在谈论 环境变量 (在 Windows 上也可用)。你用的是弹簧吗?它具有从环境中读取属性的内置支持。
  • 不,我没有使用 Spring。我的实际情况是指文件路径。该文件保存在服务器上的某个位置,我的属性文件应该具有此值。文件路径可用作服务器上的变量,但我无法在我的属性文件中使用该变量。只有硬编码路径有效。顺便说一句,Kafka 消费者的属性是 ssl.truststore.location

标签: java variables unix properties


【解决方案1】:

Java 具有使用ProcessBuilder 与系统命令交互的 API。

您可以使用以下解决方案来使用 java 读取 UNIX 属性:

ProcessBuilder processBuilder = new ProcessBuilder("/bin/bash", "-c", "echo $US_NAT_BANK");
    final Process process = processBuilder.start();
    try (InputStream is = process.getInputStream()) {
        byte[] result = is.readAllBytes();
        System.out.println(new String(result, UTF_8));
    }

使用ProcessBuilder,您可以执行任何 UNIX 支持的命令,并获得与控制台/终端相同的结果。

您可以了解更多详情:ProcessBuilder JavaDoc

【讨论】:

  • 这是读取System.getenv"("US_NAT_BANK") 值的复杂方式。
最近更新 更多