java - 如何在 java 运行时解析环境变量

标签 java environment-variables

我的 java 应用程序需要在运行时解析文件路径中的环境变量,文件路径将在属性文件中指定如下 如果是 Windows,它将是 %JAVA_HOME%\certs\myselffign.cer 如果是 unix,它将是 $JAVA_HOME\certs\myselffign.cer

我的 java 应用程序需要将这些文件路径解析为绝对路径并将证书加载到信任库中。

有什么办法吗? 截至目前,我正在检查 os.name ,如果 os.name 是 windows 则模式匹配 %% 并使用 system.getenv ,以防非 windows 寻找 $。

我希望有更好的方法来做到这一点

最佳答案

您可以在属性文件中使用 ${java.home} 的标准 (Java) 模板语法,然后在运行时用 System.getProperty("java.home"); 的值替换它;。所以在你的文件中而不是:

certificate=%JAVA_HOME%\certs\myselffign.cer (Windows)
certificate=$JAVA_HOME\certs\myselffign.cer (*nix)

只需使用一个标准:

certificate=${java.home}/certs/myselfsign.cer

然后在代码中做类似的事情:

String javaHomePath = System.getProperty("java.home")l
Properties props = Properties.load( ...);
String certFilePath = props.get("certificate");
certFilePath = certFilePath.replaceAll("${java.home}", javaHomePath);

请注意,使用标准模板语法还允许您使用一些开源属性替换工具。像 Spring PropertyResolver。希望对您有所帮助。

关于java - 如何在 java 运行时解析环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9239932/

相关文章:

java - 将 JSON 发送到 Firebase 云消息传递

python - 如何在 Amazon Elastic Beanstalk (Python) 中设置环境变量

java - 如何设置 ANDROID_HOME 环境变量?

azure - Nextjs 应用程序从 Azure 应用程序服务读取配置

c# - 确定 View 中的 ASP.NET Core 环境名称

python - 如何设置vsvars32环境变量?

java - 使用 [java] sax 读取 xml 文件的最佳算法/模式是什么?

java - 为什么此转换无效?

java - 当我将quarkus适配到一个简单的spring boot项目时出现“No Spring WebApplicationInitializer types detected on classpath”?

java - request.getParameter - 无法读取 &