哪种合适的已知Java方法可以帮助我们针对系统属性和环境变量解决占位符值,例如${catalina.base}/keystore.jks
?例如,他们在${catalina.base}
值中检测${catalina.base}/keystore.jks
并将其替换为适当的值。
答案 0 :(得分:4)
我找到了一个很好的文库,它支持org.apache.commons.lang3中预期的puprose。您可以将其StrSubstitutor类用于我之前提到的目的。
答案 1 :(得分:2)
Java没有提供解决占位符的内置方法。
您必须使用其他一些代码。
您可以使用PropertyResolver,例如:
例如,以下代码将自动解析您的系统属性:
String resolvedString = new StandardEnvironment().resolvePlaceholders("${catalina.base}/keystore.jks");
或者,如果您的程序使用Spring应用程序上下文(或计划使用它),您可以配置PropertyPlaceholderConfigurer以自动解析配置文件中的占位符。
根据@Thilo的建议,这个图书馆似乎可以满足您的需求。
请参阅https://github.com/typesafehub/config#uses-of-substitutions
如果您不需要Spring或typesafehub配置(如果您不需要它们,两者都会引入复杂性),我建议您开发一个简单的课程来为您完成。< / p>
恕我直言〜使用正则表达式甚至更基本的解析器的10-20行代码可以完成一个简单的情况(即:没有递归评估/依赖性解析)。
答案 2 :(得分:0)
这是您在Java中阅读环境变量的方法:
final Map<String, String> envMap = System.getenv();
for (Map.Entry entry : envMap.entrySet())
{
System.out.println(entry.getKey() + " = " + entry.getValue());
}
final String path = System.getenv("PATH");
System.out.println("PATH = " + path);
final String catalinaBase = System.getenv("catalina.base");