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

根据系统属性和环境变量解析占位符值的Java方法,java,Java,什么是合适的、已知的Java方法,可以帮助我们根据系统属性和环境变量解析占位符值,如${catalina.base}/keystore.jks?例如,它们在${catalina.base}/keystore.jks中检测${catalina.base}值,并将其替换为适当的值。这是您在Java中读取环境变量的方式: final Map<String, String> envMap = System.getenv(); for (Map.Entry entry : en

什么是合适的、已知的Java方法,可以帮助我们根据系统属性和环境变量解析占位符值,如
${catalina.base}/keystore.jks
?例如,它们在
${catalina.base}/keystore.jks
中检测
${catalina.base}
值,并将其替换为适当的值。

这是您在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");
final Map envMap=System.getenv();
对于(Map.Entry:envMap.entrySet())
{
System.out.println(entry.getKey()+“=”+entry.getValue());
}
最终字符串路径=System.getenv(“路径”);
System.out.println(“PATH=“+PATH”);
最终字符串catalinaBase=System.getenv(“catalina.base”);

这是您在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");
final Map envMap=System.getenv();
对于(Map.Entry:envMap.entrySet())
{
System.out.println(entry.getKey()+“=”+entry.getValue());
}
最终字符串路径=System.getenv(“路径”);
System.out.println(“PATH=“+PATH”);
最终字符串catalinaBase=System.getenv(“catalina.base”);

Java不提供解析占位符的内置方法

你必须使用一些额外的代码

春天 您可以使用PropertyResolver,例如:

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

String resolvedString = new StandardEnvironment().resolvePlaceholders("${catalina.base}/keystore.jks");
或者,如果您的程序使用Spring应用程序上下文(或计划使用它),则可以配置以自动解析配置文件中的占位符

类型安全中心配置 正如@Thilo所建议的,这个库似乎可以满足您的需要

自己动手做 如果您不需要Spring或typesafehub配置(如果您不需要它们,两者都会带来复杂性),我建议您开发一个简单的类来为您实现这一点


IMHO~10-20行使用正则表达式或更基本的解析器的代码可以在一个简单的情况下完成这项工作(即:没有递归求值/依赖解析)。

Java不提供解析占位符的内置方法

你必须使用一些额外的代码

春天 您可以使用PropertyResolver,例如:

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

String resolvedString = new StandardEnvironment().resolvePlaceholders("${catalina.base}/keystore.jks");
或者,如果您的程序使用Spring应用程序上下文(或计划使用它),则可以配置以自动解析配置文件中的占位符

类型安全中心配置 正如@Thilo所建议的,这个库似乎可以满足您的需要

自己动手做 如果您不需要Spring或typesafehub配置(如果您不需要它们,两者都会带来复杂性),我建议您开发一个简单的类来为您实现这一点


IMHO~10-20行使用regex或更基本的解析器的代码可以在一个简单的情况下完成这项工作(即:没有递归求值/依赖解析)。

我发现了一个很好的库,它支持预期的puplose in。您可以将其类用于我前面提到的目的。

我发现了一个很好的库,它支持中的预期puprose。您可以将其类用于我前面提到的目的。

对不起!!!但是我没有明白你的要求?看看Typesafe配置,我在这里的意思是,是否有任何Java方法可以让我们像上面那样识别占位符值,并用适当的系统属性或环境变量值替换它们?例如,它们在${catalina.base}/keystore.jks值内检测${catalina.base},并用适当的值替换它。仅仅因为所有的答案都是关于图书馆的,并不意味着这个问题是一个软rec问题。在本例中,OP不要求使用库。从一个新手的角度来看,这种行为似乎是标准的,这个问题是完全合法的,但碰巧所有的答案都指向外部库。因此,这不是一个软rec问题。对不起!!!但是我没有明白你的要求?看看Typesafe配置,我在这里的意思是,是否有任何Java方法可以让我们像上面那样识别占位符值,并用适当的系统属性或环境变量值替换它们?例如,它们在${catalina.base}/keystore.jks值内检测${catalina.base},并用适当的值替换它。仅仅因为所有的答案都是关于图书馆的,并不意味着这个问题是一个软rec问题。在本例中,OP不要求使用库。从一个新手的角度来看,这种行为似乎是标准的,这个问题是完全合法的,但碰巧所有的答案都指向外部库。因此,这不是一个软rec问题。