用于根据系统属性和环境变量解析占位符值的Java方法

时间:2016-03-17 07:21:40

标签: java

哪种合适的已知Java方法可以帮助我们针对系统属性和环境变量解决占位符值,例如${catalina.base}/keystore.jks?例如,他们在${catalina.base}值中检测${catalina.base}/keystore.jks并将其替换为适当的值。

3 个答案:

答案 0 :(得分:4)

我找到了一个很好的文库,它支持org.apache.commons.lang3中预期的puprose。您可以将其StrSubstitutor类用于我之前提到的目的。

答案 1 :(得分:2)

Java没有提供解决占位符的内置方法。

您必须使用其他一些代码。

弹簧

您可以使用PropertyResolver,例如:

例如,以下代码将自动解析您的系统属性:

String resolvedString = new StandardEnvironment().resolvePlaceholders("${catalina.base}/keystore.jks");

或者,如果您的程序使用Spring应用程序上下文(或计划使用它),您可以配置PropertyPlaceholderConfigurer以自动解析配置文件中的占位符。

typesafehub config

根据@Thilo的建议,这个图书馆似乎可以满足您的需求。

请参阅https://github.com/typesafehub/config#uses-of-substitutions

DIY

如果您不需要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");