Java 在字符串中插入环境变量
我需要在字符串中展开环境变量。例如,在解析配置文件时,我希望能够读取以下内容Java 在字符串中插入环境变量,java,environment-variables,string-interpolation,Java,Environment Variables,String Interpolation,我需要在字符串中展开环境变量。例如,在解析配置文件时,我希望能够读取以下内容 statsFile=${APP\u LOG\u DIR}/APP.stats 并获取一个值“/logs/myapp/app.stats”,其中环境变量app_LOG_DIR=“/logs/myapp” 这似乎是一种非常常见的需求,Logback框架等工具可以为自己的配置文件执行此操作,但我还没有找到一种规范的方法来为自己的配置文件执行此操作 注: 这不是许多“java字符串中的变量插值”问题的重复。我需要以特定的格式$
statsFile=${APP\u LOG\u DIR}/APP.stats
并获取一个值“/logs/myapp/app.stats”,其中环境变量app_LOG_DIR=“/logs/myapp”
这似乎是一种非常常见的需求,Logback框架等工具可以为自己的配置文件执行此操作,但我还没有找到一种规范的方法来为自己的配置文件执行此操作
注:
回答我自己的问题。感谢@radulfr在上述评论中的链接提供的线索,我找到了一个非常干净的解决方案,使用StrSubstitutor,如下所示: 总结如下:
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.text.StrLookup;
import org.apache.commons.lang3.text.StrSubstitutor;
public class StrSubstitutorMain {
private static final StrSubstitutor envPropertyResolver = new StrSubstitutor(new EnvLookUp());
public static void main(String[] args) {
String sample = "LANG: ${LANG}";
//LANG: en_US.UTF-8
System.out.println(envPropertyResolver.replace(sample));
}
private static class EnvLookUp extends StrLookup {
@Override
public String lookup(String key) {
String value = System.getenv(key);
if (StringUtils.isBlank(value)) {
throw new IllegalArgumentException("key" + key + "is not found in the env variables");
}
return value;
}
}
}
回答我自己的问题。感谢@radulfr在上述评论中的链接提供的线索,我找到了一个非常干净的解决方案,使用StrSubstitutor,如下所示: 总结如下:
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.text.StrLookup;
import org.apache.commons.lang3.text.StrSubstitutor;
public class StrSubstitutorMain {
private static final StrSubstitutor envPropertyResolver = new StrSubstitutor(new EnvLookUp());
public static void main(String[] args) {
String sample = "LANG: ${LANG}";
//LANG: en_US.UTF-8
System.out.println(envPropertyResolver.replace(sample));
}
private static class EnvLookUp extends StrLookup {
@Override
public String lookup(String key) {
String value = System.getenv(key);
if (StringUtils.isBlank(value)) {
throw new IllegalArgumentException("key" + key + "is not found in the env variables");
}
return value;
}
}
}
变量APP_LOG_DIR是一个环境变量或配置文件中的一个属性?APP_LOG_DIR是一个环境变量,我想在配置文件中使用${APP_LOG_DIR}语法引用它。这个怎么样:@radulfr,看起来与我需要的类似。对于这样一个常见的需求,我想会有一个解决方案,不需要编写自己的函数,但是,如果我找不到更好的方法,这可能会起作用。变量APP_LOG_DIR是一个环境变量或配置文件中的属性?APP_LOG_DIR是一个环境变量,我想在配置文件中使用${APP_LOG_DIR}语法引用它。这个如何:@radulfr,看起来与我需要的类似。对于这样一个常见的需求,我想会有一个解决方案,它不需要编写自己的函数,但如果我找不到更好的方法,它可能会起作用。